eplf/scripts/reduce_ndets.py

53 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python
import common
import sys,os,time
from ezfio import ezfio
from math import *
# Check command line
firstArg = sys.argv[1]
if len(sys.argv) == 2:
det_thr=0.001
elif len(sys.argv) == 3:
det_thr=float(sys.argv[2])
else:
print("usage: "+sys.argv[0]+" file.out det_threshold")
sys.exit(2)
def reduce_dets():
ezfio.set_file(firstArg)
os.system ("cp -r %s/determinants %s/determinants.bak"%(firstArg,firstArg))
print("Initial number of determinants: ",ezfio.determinants_det_num)
coef = ezfio.determinants_det_coef
norm = sum( [x*x for x in coef] )
print("Norm of the initial wave function: ", sqrt(norm))
dets_a, dets_b = ezfio.determinants_det_occ
to_remove = []
for i, c in enumerate(coef):
if abs(c) < det_thr:
to_remove.append(i)
to_remove.sort()
to_remove.reverse()
for i in to_remove:
coef.pop(i)
dets_a.pop(i)
dets_b.pop(i)
print("New number of determinants: ", len(coef))
norm = sum( [x*x for x in coef] )
print("Norm of the new wave function: ", sqrt(norm))
ezfio.determinants_det_num = len(coef)
ezfio.determinants_det_coef = coef
ezfio.determinants_det_occ = dets_a+dets_b
def main():
reduce_dets()
if __name__ == '__main__':
main()