9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-07 14:03:37 +01:00

AB update

This commit is contained in:
Kevin Gasperich 2020-08-28 14:13:09 -05:00 committed by Kevin Gasperich
parent 1daa85ffb9
commit e9842cae9b
2 changed files with 176 additions and 31 deletions

View File

@ -208,6 +208,27 @@ def convert_kpts(filename,qph5path):
ezfio.set_nuclei_nuclear_repulsion(nuclear_repulsion)
##########################################
# #
# Basis #
# #
##########################################
#with h5py.File(qph5path,'r') as qph5:
# ezfio.set_ao_basis_ao_basis(qph5['ao_basis'].attrs['ao_basis'])
# ezfio.set_ao_basis_ao_nucl(qph5['ao_basis/ao_nucl'][()].tolist())
#
#
#Just need one (can clean this up later)
# ao_prim_num_max = 5
#
# d = [ [0] *ao_prim_num_max]*ao_num
# ezfio.set_ao_basis_ao_prim_num([ao_prim_num_max]*ao_num)
# ezfio.set_ao_basis_ao_power(d)
# ezfio.set_ao_basis_ao_coef(d)
# ezfio.set_ao_basis_ao_expo(d)
##########################################
# #
# Basis #
@ -215,19 +236,35 @@ def convert_kpts(filename,qph5path):
##########################################
with h5py.File(qph5path,'r') as qph5:
do_pseudo = qph5['pseudo'].attrs['do_pseudo']
ezfio.set_pseudo_do_pseudo(do_pseudo)
if (do_pseudo):
ezfio.set_pseudo_pseudo_lmax(qph5['pseudo'].attrs['pseudo_lmax'])
ezfio.set_pseudo_pseudo_klocmax(qph5['pseudo'].attrs['pseudo_klocmax'])
ezfio.set_pseudo_pseudo_kmax(qph5['pseudo'].attrs['pseudo_kmax'])
ezfio.set_pseudo_nucl_charge_remove(qph5['pseudo/nucl_charge_remove'][()].tolist())
ezfio.set_pseudo_pseudo_n_k(qph5['pseudo/pseudo_n_k'][()].tolist())
ezfio.set_pseudo_pseudo_n_kl(qph5['pseudo/pseudo_n_kl'][()].tolist())
ezfio.set_pseudo_pseudo_v_k(qph5['pseudo/pseudo_v_k'][()].tolist())
ezfio.set_pseudo_pseudo_v_kl(qph5['pseudo/pseudo_v_kl'][()].tolist())
ezfio.set_pseudo_pseudo_dz_k(qph5['pseudo/pseudo_dz_k'][()].tolist())
ezfio.set_pseudo_pseudo_dz_kl(qph5['pseudo/pseudo_dz_kl'][()].tolist())
##########################################
# #
# Basis #
# #
##########################################
with h5py.File(qph5path,'r') as qph5:
coeftmp = qph5['ao_basis/ao_coef'][()]
expotmp = qph5['ao_basis/ao_expo'][()]
ezfio.set_ao_basis_ao_basis(qph5['ao_basis'].attrs['ao_basis'])
ezfio.set_ao_basis_ao_nucl(qph5['ao_basis/ao_nucl'][()].tolist())
#Just need one (can clean this up later)
ao_prim_num_max = 5
d = [ [0] *ao_prim_num_max]*ao_num
ezfio.set_ao_basis_ao_prim_num([ao_prim_num_max]*ao_num)
ezfio.set_ao_basis_ao_power(d)
ezfio.set_ao_basis_ao_coef(d)
ezfio.set_ao_basis_ao_expo(d)
ezfio.set_ao_basis_ao_prim_num(qph5['ao_basis/ao_prim_num'][()].tolist())
ezfio.set_ao_basis_ao_power(qph5['ao_basis/ao_power'][()].tolist())
ezfio.set_ao_basis_ao_coef(qph5['ao_basis/ao_coef'][()].tolist())
ezfio.set_ao_basis_ao_expo(qph5['ao_basis/ao_expo'][()].tolist())
@ -404,19 +441,56 @@ def convert_cplx(filename,qph5path):
# #
##########################################
# with h5py.File(qph5path,'r') as qph5:
# ezfio.set_ao_basis_ao_basis(qph5['ao_basis'].attrs['ao_basis'])
# ezfio.set_ao_basis_ao_nucl(qph5['ao_basis/ao_nucl'][()].tolist())
#
#
# #Just need one (can clean this up later)
# ao_prim_num_max = 5
#
# d = [ [0] *ao_prim_num_max]*ao_num
# ezfio.set_ao_basis_ao_prim_num([ao_prim_num_max]*ao_num)
# ezfio.set_ao_basis_ao_power(d)
# ezfio.set_ao_basis_ao_coef(d)
# ezfio.set_ao_basis_ao_expo(d)
##########################################
# #
# Basis #
# #
##########################################
with h5py.File(qph5path,'r') as qph5:
do_pseudo = qph5['pseudo'].attrs['do_pseudo']
ezfio.set_pseudo_do_pseudo(do_pseudo)
if (do_pseudo):
ezfio.set_pseudo_pseudo_lmax(qph5['pseudo'].attrs['pseudo_lmax'])
ezfio.set_pseudo_pseudo_klocmax(qph5['pseudo'].attrs['pseudo_klocmax'])
ezfio.set_pseudo_pseudo_kmax(qph5['pseudo'].attrs['pseudo_kmax'])
ezfio.set_pseudo_nucl_charge_remove(qph5['pseudo/nucl_charge_remove'][()].tolist())
ezfio.set_pseudo_pseudo_n_k(qph5['pseudo/pseudo_n_k'][()].tolist())
ezfio.set_pseudo_pseudo_n_kl(qph5['pseudo/pseudo_n_kl'][()].tolist())
ezfio.set_pseudo_pseudo_v_k(qph5['pseudo/pseudo_v_k'][()].tolist())
ezfio.set_pseudo_pseudo_v_kl(qph5['pseudo/pseudo_v_kl'][()].tolist())
ezfio.set_pseudo_pseudo_dz_k(qph5['pseudo/pseudo_dz_k'][()].tolist())
ezfio.set_pseudo_pseudo_dz_kl(qph5['pseudo/pseudo_dz_kl'][()].tolist())
##########################################
# #
# Basis #
# #
##########################################
with h5py.File(qph5path,'r') as qph5:
coeftmp = qph5['ao_basis/ao_coef'][()]
expotmp = qph5['ao_basis/ao_expo'][()]
ezfio.set_ao_basis_ao_basis(qph5['ao_basis'].attrs['ao_basis'])
ezfio.set_ao_basis_ao_nucl(qph5['ao_basis/ao_nucl'][()].tolist())
#Just need one (can clean this up later)
ao_prim_num_max = 5
d = [ [0] *ao_prim_num_max]*ao_num
ezfio.set_ao_basis_ao_prim_num([ao_prim_num_max]*ao_num)
ezfio.set_ao_basis_ao_power(d)
ezfio.set_ao_basis_ao_coef(d)
ezfio.set_ao_basis_ao_expo(d)
ezfio.set_ao_basis_ao_prim_num(qph5['ao_basis/ao_prim_num'][()].tolist())
ezfio.set_ao_basis_ao_power(qph5['ao_basis/ao_power'][()].tolist())
ezfio.set_ao_basis_ao_coef(qph5['ao_basis/ao_coef'][()].tolist())
ezfio.set_ao_basis_ao_expo(qph5['ao_basis/ao_expo'][()].tolist())

View File

@ -603,6 +603,8 @@ def pyscf2QP2(cell,mf, kpts, kmesh=None, cas_idx=None, int_threshold = 1E-8,
qph5.create_group('electrons')
qph5.create_group('ao_basis')
qph5.create_group('mo_basis')
qph5.create_group('pseudo')
qph5['pseudo'].attrs['do_pseudo']=False
qph5.create_group('PBC_DATA')
mo_coeff = mf.mo_coeff
@ -671,19 +673,13 @@ def pyscf2QP2(cell,mf, kpts, kmesh=None, cas_idx=None, int_threshold = 1E-8,
# shell start,end; AO start,end (sph or cart) for each atom
for ib in range(sh0,sh1): # sets of contracted exponents
l = cell.bas_angular(ib) # angular momentum
if ( cell.cart==True):
representation=((l+1)*(l+2))//2
else:
representation=2*l-1
nprim = cell.bas_nprim(ib) # numer of primitives
es = cell.bas_exp(ib) # exponents
cs = cell.bas_ctr_coeff(ib) # coeffs
nctr = cell.bas_nctr(ib) # number of contractions
print(iatom,ib,l,nprim,nctr,tmp_idx)
for ic in range(nctr): # sets of contraction coeffs
# for nfunc in range(((l+1)*(l+2))//2): # always use cart for qp ao basis?
# for nfunc in range(2*l-1):
for nfunc in range(representation):
for nfunc in range(((l+1)*(l+2))//2): # always use cart for qp ao basis?
qp_expo[tmp_idx,:nprim] = es[:]
qp_coef[tmp_idx,:nprim] = cs[:,ic]
qp_nucl[tmp_idx] = iatom + 1
@ -878,6 +874,81 @@ def pyscf2QP2(cell,mf, kpts, kmesh=None, cas_idx=None, int_threshold = 1E-8,
qph5.create_dataset('PBC_DATA/eigenval',(1,nmo),dtype="f8",data=mf.mo_energy)
##########################################
# #
# ECP #
# #
##########################################
if (cell.has_ecp()):
#atsymb = [mol.atom_pure_symbol(i) for i in range(natom)]
#pyecp = mol._ecp
## nelec to remove for each atom
#nuc_z_remov = [pyecp[i][0] for i in atsymb]
#nl_per_atom = [len(pyecp[i][1]) for i in atsymb]
## list of l-values for channels of each atom
#ecp_l = [[pyecp[i][1][j][0] for j in range(len(pyecp[i][1]))] for i in atsymb]
## list of [exp,coef] for each channel (r**0,1,2,3,4,5,)
#ecp_ac = [[pyecp[i][1][j][1] for j in range(len(pyecp[i][1]))] for i in atsymb]
pyecp = [cell._ecp[cell.atom_pure_symbol(i)] for i in range(natom)]
nzrmv=[0]*natom
lmax=0
klocmax=0
knlmax=0
for i,(nz,dat) in enumerate(pyecp):
nzrmv[i]=nz
for lval,ac in dat:
if (lval==-1):
klocmax=max(sum(len(j) for j in ac),klocmax)
else:
lmax=max(lval,lmax)
knlmax=max(sum(len(j) for j in ac),knlmax)
#psd_nk = np.zeros((natom,klocmax),dtype=int)
#psd_vk = np.zeros((natom,klocmax),dtype=float)
#psd_dzk = np.zeros((natom,klocmax),dtype=float)
#psd_nkl = np.zeros((natom,knlmax,lmax+1),dtype=int)
#psd_vkl = np.zeros((natom,knlmax,lmax+1),dtype=float)
#psd_dzkl = np.zeros((natom,knlmax,lmax+1),dtype=float)
klnlmax=max(klocmax,knlmax)
psd_n = np.zeros((lmax+2,klnlmax,natom),dtype=int)
psd_v = np.zeros((lmax+2,klnlmax,natom),dtype=float)
psd_dz = np.zeros((lmax+2,klnlmax,natom),dtype=float)
for i,(_,dat) in enumerate(pyecp):
for lval,ac in dat:
count=0
for ri,aici in enumerate(ac):
for ai,ci in aici:
psd_n[lval+1,count,i] = ri-2
psd_v[lval+1,count,i] = ci
psd_dz[lval+1,count,i] = ai
count += 1
psd_nk = psd_n[0,:klocmax]
psd_vk = psd_v[0,:klocmax]
psd_dzk = psd_dz[0,:klocmax]
psd_nkl = psd_n[1:,:knlmax]
psd_vkl = psd_v[1:,:knlmax]
psd_dzkl = psd_dz[1:,:knlmax]
with h5py.File(qph5path,'a') as qph5:
qph5['pseudo'].attrs['do_pseudo']=True
qph5['pseudo'].attrs['pseudo_lmax']=lmax
qph5['pseudo'].attrs['pseudo_klocmax']=klocmax
qph5['pseudo'].attrs['pseudo_kmax']=knlmax
qph5.create_dataset('pseudo/nucl_charge_remove',data=nzrmv)
qph5.create_dataset('pseudo/pseudo_n_k',data=psd_nk)
qph5.create_dataset('pseudo/pseudo_n_kl',data=psd_nkl)
qph5.create_dataset('pseudo/pseudo_v_k',data=psd_vk)
qph5.create_dataset('pseudo/pseudo_v_kl',data=psd_vkl)
qph5.create_dataset('pseudo/pseudo_dz_k',data=psd_dzk)
qph5.create_dataset('pseudo/pseudo_dz_kl',data=psd_dzkl)
## nelec to remove for each atom
#nuc_z_remov = [i[0] for i in pyecp]
#nl_per_atom = [len(i[1]) for i in pyecp]
## list of l-values for channels of each atom
#ecp_l = [[ j[0] for j in i[1] ] for i in pyecp]
#lmax = max(map(max,ecp_l))
## list of [exp,coef] for each channel (r**0,1,2,3,4,5,)
#ecp_ac = [[ j[1] for j in i[1] ] for i in pyecp]
return