10
1
mirror of https://github.com/pfloos/quack synced 2024-12-22 20:34:46 +01:00

separete binary code and I/O when --working_dir is used

This commit is contained in:
Abdallah Ammar 2024-10-31 10:46:00 +01:00
parent f2ead7138b
commit 1f56026c29

View File

@ -70,6 +70,7 @@ nelec=mol.nelec #Access the number of electrons
nalpha=nelec[0] nalpha=nelec[0]
nbeta=nelec[1] nbeta=nelec[1]
subprocess.call(['mkdir', '-p', 'input'])
f = open(working_dir+'/input/molecule','w') f = open(working_dir+'/input/molecule','w')
f.write('# nAt nEla nElb nCore nRyd\n') f.write('# nAt nEla nElb nCore nRyd\n')
f.write(str(mol.natm)+' '+str(nalpha)+' '+str(nbeta)+' '+str(0)+' '+str(0)+'\n') f.write(str(mol.natm)+' '+str(nalpha)+' '+str(nbeta)+' '+str(0)+' '+str(0)+'\n')
@ -79,7 +80,8 @@ for i in range(len(list_pos_atom)):
f.close() f.close()
#Compute nuclear energy and put it in a file #Compute nuclear energy and put it in a file
subprocess.call(['rm', working_dir + '/int/ENuc.dat']) subprocess.call(['mkdir', '-p', 'int'])
subprocess.call(['rm', '-f', working_dir + '/int/ENuc.dat'])
f = open(working_dir+'/int/ENuc.dat','w') f = open(working_dir+'/int/ENuc.dat','w')
f.write(str(mol.energy_nuc())) f.write(str(mol.energy_nuc()))
f.write(' ') f.write(' ')
@ -100,7 +102,7 @@ f.close()
def write_matrix_to_file(matrix,size,file,cutoff=1e-15): def write_matrix_to_file(matrix,size,file,cutoff=1e-15):
f = open(file, 'a') f = open(file, 'w')
for i in range(size): for i in range(size):
for j in range(i,size): for j in range(i,size):
if abs(matrix[i][j]) > cutoff: if abs(matrix[i][j]) > cutoff:
@ -110,23 +112,23 @@ def write_matrix_to_file(matrix,size,file,cutoff=1e-15):
#Write all 1 electron quantities in files #Write all 1 electron quantities in files
#Ov,Nuc,Kin,x,y,z #Ov,Nuc,Kin,x,y,z
subprocess.call(['rm', working_dir + '/int/Ov.dat']) subprocess.call(['rm', '-f', working_dir + '/int/Ov.dat'])
write_matrix_to_file(ovlp,norb,working_dir+'/int/Ov.dat') write_matrix_to_file(ovlp,norb,working_dir+'/int/Ov.dat')
subprocess.call(['rm', working_dir + '/int/Nuc.dat']) subprocess.call(['rm', '-f', working_dir + '/int/Nuc.dat'])
write_matrix_to_file(v1e,norb,working_dir+'/int/Nuc.dat') write_matrix_to_file(v1e,norb,working_dir+'/int/Nuc.dat')
subprocess.call(['rm', working_dir + '/int/Kin.dat']) subprocess.call(['rm', '-f', working_dir + '/int/Kin.dat'])
write_matrix_to_file(t1e,norb,working_dir+'/int/Kin.dat') write_matrix_to_file(t1e,norb,working_dir+'/int/Kin.dat')
subprocess.call(['rm', working_dir + '/int/x.dat']) subprocess.call(['rm', '-f', working_dir + '/int/x.dat'])
write_matrix_to_file(x,norb,working_dir+'/int/x.dat') write_matrix_to_file(x,norb,working_dir+'/int/x.dat')
subprocess.call(['rm', working_dir + '/int/y.dat']) subprocess.call(['rm', '-f', working_dir + '/int/y.dat'])
write_matrix_to_file(y,norb,working_dir+'/int/y.dat') write_matrix_to_file(y,norb,working_dir+'/int/y.dat')
subprocess.call(['rm', working_dir + '/int/z.dat']) subprocess.call(['rm', '-f', working_dir + '/int/z.dat'])
write_matrix_to_file(z,norb,working_dir+'/int/z.dat') write_matrix_to_file(z,norb,working_dir+'/int/z.dat')
eri_ao = mol.intor('int2e') eri_ao = mol.intor('int2e')
def write_tensor_to_file(tensor,size,file,cutoff=1e-15): def write_tensor_to_file(tensor,size,file,cutoff=1e-15):
f = open(file, 'a') f = open(file, 'w')
for i in range(size): for i in range(size):
for j in range(i,size): for j in range(i,size):
for k in range(i,size): for k in range(i,size):
@ -140,15 +142,18 @@ def write_tensor_to_file(tensor,size,file,cutoff=1e-15):
# Write two-electron integrals # Write two-electron integrals
if print_2e: if print_2e:
# (formatted) # (formatted)
subprocess.call(['rm', working_dir + '/int/ERI.dat']) subprocess.call(['rm', '-f', working_dir + '/int/ERI.dat'])
write_tensor_to_file(eri_ao,norb,working_dir+'/int/ERI.dat') write_tensor_to_file(eri_ao, norb, working_dir + '/int/ERI.dat')
else: else:
# (binary) # (binary)
subprocess.call(['rm', working_dir + '/int/ERI.bin']) subprocess.call(['rm', '-f', working_dir + '/int/ERI.bin'])
# chem -> phys notation # chem -> phys notation
eri_ao = eri_ao.transpose(0, 2, 1, 3) eri_ao = eri_ao.transpose(0, 2, 1, 3)
eri_ao.tofile('int/ERI.bin') f = open(working_dir + '/int/ERI.bin', 'w')
eri_ao.tofile(working_dir + '/int/ERI.bin')
f.close()
#Execute the QuAcK fortran program #Execute the QuAcK fortran program
print(QuAcK_dir)
subprocess.call(QuAcK_dir+'/bin/QuAcK') subprocess.call(QuAcK_dir+'/bin/QuAcK')