NWChem/contrib/python/basopt4.nw
2018-10-08 12:34:53 -07:00

86 lines
1.9 KiB
Text

start basopt3
# Optimize an even tempered set of primitive s functions
# for Be.
# exponent[i] = alpha*beta^i, i=0..n-1
# In order to enforce the positive definite constraint on alpha
# and beta perform an unconstrained minimization on the variables
# z[] with alpha = 0.001 + z[0]^2, beta = 0.001 + z[1]^2
geometry
Be 0 0 0
end
scf
thresh 1e-8
tol2e 1e-12
end
set lindep:n_dep 0
set int:acc_std 1e-25
print none
python
from __future__ import print_function
from mathutil import *
n = 6
alpha = 0.2
beta = 3
def make_alpha_beta(z):
alpha = z[0]*z[0] + 0.001
beta = z[1]*z[1] + 0.001
return (alpha, beta)
def make_exp(z):
(alpha, beta) = make_alpha_beta(z)
exponents = zerovector(n)
ee = alpha
for i in range(n):
exponents[i] = ee
ee = ee * beta
return exponents
def energy(z):
exponents = make_exp(z)
basis = 'basis noprint;'
for i in range(n):
basis = basis + ("Be s; %f 1;" % exponents[i])
basis = basis + "end\n"
input_parse(basis)
return task_energy('scf')
def printexp(z):
exponents = make_exp(z)
print('\n alpha %f beta %f' % (z[0]*z[0],z[1]*z[1]))
print(' Exponents:')
for i in range(n):
print(" %14.8f" % exponents[i],)
if ((i+1)%5) == 0:
print("")
print(" ")
z = zerovector(2)
z[0] = sqrt(alpha - 0.001)
z[1] = sqrt(beta - 0.001)
results = {}
for n in range(2,21):
(value,z) = quasinr(energy, z, 1e-4, 1e-9, printexp)
(alpha, beta) = make_alpha_beta(z)
results[n] = (alpha, beta, value)
print('\n\n Results\n')
print(' n alpha beta energy error ')
print(' --- --------- --------- ------------ -----------')
(alpha, beta, limit) = results[20]
for n in range(2,21):
(alpha, beta, value) = results[n]
print('%4i %10.6f %10.6f %12.6f %12.6f' % (n, alpha, beta, value, value-limit))
end
task python