def pt(self): newsolver = self newsolver.twopdm = False newsolver.scheduleSweeps = [0, 2, 6] newsolver.scheduleMaxMs = [self.maxM, self.maxM, self.maxM] newsolver.scheduleTols = [1e-5, 1e-5, 1e-7] newsolver.scheduleNoises = [1e-4, 5e-5, 0.0] newsolver.twodot_to_onedot = 0 newsolver.maxIter = 12 newsolver.block_extra_keyword.append('response') newsolver.block_extra_keyword.append('baseStates %d' % self.state) newsolver.block_extra_keyword.append('projectorStates %d' % self.state) newsolver.block_extra_keyword.append('GuessState %d' % (self.state + 1000)) newsolver.block_extra_keyword.append('targetState %d' % (self.state + 2000)) newsolver.block_extra_keyword.append('occ 9999') newsolver.block_extra_keyword.append('twodot') newsolver.configFile = "pdmrg.conf" newsolver.outputFile = "pdmrg.out" newsolver.integralFile = self.H0_file + ' ' + self.H1_file dmrgci.writeDMRGConfFile(newsolver, newsolver.nelec, Restart=False, with_2pdm=False) dmrgci.executeBLOCK(newsolver)
def compress(self): newsolver = self newsolver.scheduleSweeps newsolver.scheduleSweeps = [0, 1, 2] newsolver.scheduleMaxMs = [self.maxM, self.maxM, self.maxM] newsolver.scheduleTols = [0.0001, 1e-7, 1e-7] newsolver.scheduleNoises = [0.0001, 0.0001, 0.0] newsolver.twodot_to_onedot = 2 newsolver.maxIter = 6 newsolver.twopdm = False newsolver.block_extra_keyword.append('compress %d'%self.state) newsolver.block_extra_keyword.append('targetState %d'%(self.state+1000)) newsolver.configFile = "compress.conf" newsolver.outputFile = "compress.out" newsolver.integralFile = self.H1_file dmrgci.writeDMRGConfFile(newsolver,newsolver.nelec,Restart=False,with_2pdm=False) dmrgci.executeBLOCK(newsolver)
def pt(self): newsolver = self newsolver.twopdm = False newsolver.scheduleSweeps = [0, 2, 6] newsolver.scheduleMaxMs = [self.maxM, self.maxM, self.maxM] newsolver.scheduleTols = [1e-5, 1e-5, 1e-7] newsolver.scheduleNoises = [1e-4, 5e-5, 0.0] newsolver.twodot_to_onedot = 0 newsolver.maxIter = 12 newsolver.block_extra_keyword.append('response') newsolver.block_extra_keyword.append('baseStates %d'%self.state) newsolver.block_extra_keyword.append('projectorStates %d'%self.state) newsolver.block_extra_keyword.append('GuessState %d'%(self.state+1000)) newsolver.block_extra_keyword.append('targetState %d'%(self.state+2000)) newsolver.block_extra_keyword.append('occ 9999') newsolver.block_extra_keyword.append('twodot') newsolver.configFile = "pdmrg.conf" newsolver.outputFile = "pdmrg.out" newsolver.integralFile = self.H0_file+' '+self.H1_file dmrgci.writeDMRGConfFile(newsolver,newsolver.nelec,Restart=False,with_2pdm=False) dmrgci.executeBLOCK(newsolver)
def DMRG_COMPRESS_NEVPT(mc, maxM=500, root=0, nevptsolver=None, tol=1e-7): if (isinstance(mc, str)): mol = chkfile.load_mol(mc) fh5 = h5py.File(mc, 'r') ncas = fh5['mc/ncas'].value ncore = fh5['mc/ncore'].value nvirt = fh5['mc/nvirt'].value nelecas = fh5['mc/nelecas'].value nroots = fh5['mc/nroots'].value wfnsym = fh5['mc/wfnsym'].value fh5.close() mc_chk = mc else : mol = mc.mol ncas = mc.ncas ncore = mc.ncore nvirt = mc.mo_coeff.shape[1] - mc.ncas-mc.ncore nelecas = mc.nelecas nroots = mc.fcisolver.nroots wfnsym = mc.fcisolver.wfnsym mc_chk = 'nevpt_perturb_integral' write_chk(mc, root, mc_chk) if nevptsolver is None: nevptsolver = default_nevpt_schedule(mol,maxM, tol) nevptsolver.wfnsym = wfnsym nevptsolver.block_extra_keyword = mc.fcisolver.block_extra_keyword nevptsolver.nroots = nroots from pyscf.dmrgscf import settings nevptsolver.executable = settings.BLOCKEXE_COMPRESS_NEVPT scratch = nevptsolver.scratchDirectory nevptsolver.scratchDirectory = '' dmrgci.writeDMRGConfFile(nevptsolver, nelecas, False, with_2pdm=False, extraline=['fullrestart','nevpt_state_num %d'%root]) nevptsolver.scratchDirectory = scratch if nevptsolver.verbose >= logger.DEBUG1: inFile = os.path.join(nevptsolver.runtimeDir, nevptsolver.configFile) logger.debug1(nevptsolver, 'Block Input conf') logger.debug1(nevptsolver, open(inFile, 'r').read()) t0 = (time.clock(), time.time()) cmd = ' '.join((nevptsolver.mpiprefix, '%s/nevpt_mpi.py' % os.path.dirname(os.path.realpath(__file__)), mc_chk, nevptsolver.executable, os.path.join(nevptsolver.runtimeDir, nevptsolver.configFile), nevptsolver.outputFile, nevptsolver.scratchDirectory)) logger.debug(nevptsolver, 'DMRG_COMPRESS_NEVPT cmd %s', cmd) try: output = subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError as err: logger.error(nevptsolver, cmd) raise err if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, open(os.path.join(nevptsolver.scratchDirectory, '0/dmrg.out')).read()) fh5 = h5py.File('Perturbation_%d'%root,'r') Vi_e = fh5['Vi/energy'].value Vr_e = fh5['Vr/energy'].value fh5.close() logger.note(nevptsolver,'Nevpt Energy:') logger.note(nevptsolver,'Sr Subspace: E = %.14f'%( Vr_e)) logger.note(nevptsolver,'Si Subspace: E = %.14f'%( Vi_e)) logger.timer(nevptsolver,'MPS NEVPT calculation time', *t0)
def DMRG_COMPRESS_NEVPT(mc, maxM=500, root=0, nevptsolver=None, tol=1e-7, nevpt_integral=None): if isinstance(nevpt_integral, str) and h5py.is_hdf5(nevpt_integral): nevpt_integral_file = os.path.abspath(nevpt_integral) mol = chkfile.load_mol(nevpt_integral_file) fh5 = h5py.File(nevpt_integral_file, 'r') ncas = fh5['mc/ncas'][()] ncore = fh5['mc/ncore'][()] nvirt = fh5['mc/nvirt'][()] nelecas = fh5['mc/nelecas'][()] nroots = fh5['mc/nroots'][()] wfnsym = fh5['mc/wfnsym'][()] fh5.close() else: mol = mc.mol ncas = mc.ncas ncore = mc.ncore nvirt = mc.mo_coeff.shape[1] - mc.ncas - mc.ncore nelecas = mc.nelecas nroots = mc.fcisolver.nroots wfnsym = mc.fcisolver.wfnsym nevpt_integral_file = None if nevptsolver is None: nevptsolver = default_nevpt_schedule(mc.fcisolver, maxM, tol) #nevptsolver.__dict__.update(mc.fcisolver.__dict__) nevptsolver.wfnsym = wfnsym nevptsolver.block_extra_keyword = mc.fcisolver.block_extra_keyword nevptsolver.nroots = nroots nevptsolver.executable = settings.BLOCKEXE_COMPRESS_NEVPT if nevptsolver.executable == getattr(mc.fcisolver, 'executable', None): logger.warn( mc, 'DMRG executable file for nevptsolver is the same ' 'to the executable file for DMRG solver. If they are ' 'both compiled by MPI compilers, they may cause error or ' 'random results in DMRG-NEVPT calculation.') nevpt_scratch = os.path.abspath(nevptsolver.scratchDirectory) dmrg_scratch = os.path.abspath(mc.fcisolver.scratchDirectory) # Integrals are not given by the kwarg nevpt_integral if nevpt_integral_file is None: nevpt_integral_file = os.path.join(nevpt_scratch, 'nevpt_perturb_integral') write_chk(mc, root, nevpt_integral_file) conf = dmrgci.writeDMRGConfFile( nevptsolver, nelecas, False, with_2pdm=False, extraline=['fullrestart', 'nevpt_state_num %d' % root]) with open(conf, 'r') as f: block_conf = f.readlines() block_conf = [l for l in block_conf if 'prefix' not in l] block_conf = ''.join(block_conf) with h5py.File(nevpt_integral_file, 'a') as fh5: if 'dmrg.conf' in fh5: del (fh5['dmrg.conf']) fh5['dmrg.conf'] = block_conf if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, 'Block Input conf') logger.debug1(nevptsolver, block_conf) t0 = (time.clock(), time.time()) # function nevpt_integral_mpi is called in this cmd cmd = ' '.join( (nevptsolver.mpiprefix, os.path.realpath(os.path.join(__file__, '..', 'nevpt_mpi.py')), nevpt_integral_file, nevptsolver.executable, dmrg_scratch, nevpt_scratch)) logger.debug(nevptsolver, 'DMRG_COMPRESS_NEVPT cmd %s', cmd) try: output = subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError as err: logger.error(nevptsolver, cmd) raise err if nevptsolver.verbose >= logger.DEBUG1: logger.debug1( nevptsolver, open(os.path.join(nevpt_scratch, '0', 'dmrg.out')).read()) perturb_file = os.path.join(nevpt_scratch, '0', 'Perturbation_%d' % root) fh5 = h5py.File(perturb_file, 'r') Vi_e = fh5['Vi/energy'][()] Vr_e = fh5['Vr/energy'][()] fh5.close() logger.note(nevptsolver, 'Nevpt Energy:') logger.note(nevptsolver, 'Sr Subspace: E = %.14f' % (Vr_e)) logger.note(nevptsolver, 'Si Subspace: E = %.14f' % (Vi_e)) logger.timer(nevptsolver, 'MPS NEVPT calculation time', *t0) return perturb_file
def DMRG_COMPRESS_NEVPT(mc, maxM=500, root=0, nevptsolver=None, tol=1e-7, nevpt_integral=None): if nevpt_integral: mol = chkfile.load_mol(nevpt_integral) fh5 = h5py.File(nevpt_integral, 'r') ncas = fh5['mc/ncas'].value ncore = fh5['mc/ncore'].value nvirt = fh5['mc/nvirt'].value nelecas = fh5['mc/nelecas'].value nroots = fh5['mc/nroots'].value wfnsym = fh5['mc/wfnsym'].value fh5.close() else: mol = mc.mol ncas = mc.ncas ncore = mc.ncore nvirt = mc.mo_coeff.shape[1] - mc.ncas - mc.ncore nelecas = mc.nelecas nroots = mc.fcisolver.nroots wfnsym = mc.fcisolver.wfnsym nevpt_integral_file = 'nevpt_perturb_integral' write_chk(mc, root, nevpt_integral_file) if nevptsolver is None: nevptsolver = default_nevpt_schedule(mol, maxM, tol) nevptsolver.__dict__.update(mc.fcisolver.__dict__) nevptsolver.wfnsym = wfnsym nevptsolver.block_extra_keyword = mc.fcisolver.block_extra_keyword nevptsolver.nroots = nroots nevptsolver.executable = settings.BLOCKEXE_COMPRESS_NEVPT conf = dmrgci.writeDMRGConfFile( nevptsolver, nelecas, False, with_2pdm=False, extraline=['fullrestart', 'nevpt_state_num %d' % root]) with open(conf, 'r') as f: block_conf = f.readlines() block_conf = [l for l in block_conf if 'prefix' not in l] block_conf = '\n'.join(block_conf) with h5py.File(nevpt_integral_file) as fh5: if 'dmrg.conf' in fh5: del (fh5['dmrg.conf']) fh5['dmrg.conf'] = block_conf if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, 'Block Input conf') logger.debug1(nevptsolver, block_conf) t0 = (time.clock(), time.time()) cmd = ' '.join( (nevptsolver.mpiprefix, os.path.realpath(os.path.join(__file__, '..', 'nevpt_mpi.py')), nevpt_integral_file, nevptsolver.executable, mc.fcisolver.scratchDirectory, nevptsolver.scratchDirectory)) logger.debug(nevptsolver, 'DMRG_COMPRESS_NEVPT cmd %s', cmd) try: output = subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError as err: logger.error(nevptsolver, cmd) raise err if nevptsolver.verbose >= logger.DEBUG1: logger.debug1( nevptsolver, open(os.path.join(nevptsolver.scratchDirectory, '0/dmrg.out')).read()) fh5 = h5py.File('Perturbation_%d' % root, 'r') Vi_e = fh5['Vi/energy'].value Vr_e = fh5['Vr/energy'].value fh5.close() logger.note(nevptsolver, 'Nevpt Energy:') logger.note(nevptsolver, 'Sr Subspace: E = %.14f' % (Vr_e)) logger.note(nevptsolver, 'Si Subspace: E = %.14f' % (Vi_e)) logger.timer(nevptsolver, 'MPS NEVPT calculation time', *t0)
def DMRG_COMPRESS_NEVPT(mc, maxM=500, root=0, nevptsolver=None, tol=1e-7): if (isinstance(mc, str)): mol = chkfile.load_mol(mc) fh5 = h5py.File(mc, 'r') ncas = fh5['mc/ncas'].value ncore = fh5['mc/ncore'].value nvirt = fh5['mc/nvirt'].value nelecas = fh5['mc/nelecas'].value nroots = fh5['mc/nroots'].value wfnsym = fh5['mc/wfnsym'].value fh5.close() mc_chk = mc else : mol = mc.mol ncas = mc.ncas ncore = mc.ncore nvirt = mc.mo_coeff.shape[1] - mc.ncas-mc.ncore nelecas = mc.nelecas nroots = mc.fcisolver.nroots wfnsym = mc.fcisolver.wfnsym mc_chk = 'nevpt_perturb_integral' write_chk(mc, root, mc_chk) if nevptsolver is None: nevptsolver = default_nevpt_schedule(mol,maxM, tol) nevptsolver.wfnsym = wfnsym nevptsolver.block_extra_keyword = mc.fcisolver.block_extra_keyword nevptsolver.nroots = nroots from pyscf.dmrgscf import settings nevptsolver.executable = settings.BLOCKEXE_COMPRESS_NEVPT scratch = nevptsolver.scratchDirectory nevptsolver.scratchDirectory = '' dmrgci.writeDMRGConfFile(nevptsolver, nelecas, False, with_2pdm=False, extraline=['fullrestart','nevpt_state_num %d'%root]) nevptsolver.scratchDirectory = scratch if nevptsolver.verbose >= logger.DEBUG1: inFile = os.path.join(nevptsolver.runtimeDir, nevptsolver.configFile) logger.debug1(nevptsolver, 'Block Input conf') logger.debug1(nevptsolver, open(inFile, 'r').read()) t0 = (time.clock(), time.time()) cmd = ' '.join((nevptsolver.mpiprefix, '%s/nevpt_mpi.py' % os.path.dirname(os.path.realpath(__file__)), mc_chk, nevptsolver.executable, nevptsolver.configFile, nevptsolver.outputFile, nevptsolver.scratchDirectory)) logger.debug(nevptsolver, 'DMRG_COMPRESS_NEVPT cmd %s', cmd) try: output = subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError as err: logger.error(nevptsolver, cmd) raise err if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, open(os.path.join(nevptsolver.scratchDirectory, '0/dmrg.out')).read()) fh5 = h5py.File('Perturbation_%d'%root,'r') Vi_e = fh5['Vi/energy'].value Vr_e = fh5['Vr/energy'].value fh5.close() logger.note(nevptsolver,'Nevpt Energy:') logger.note(nevptsolver,'Sr Subspace: E = %.14f'%( Vr_e)) logger.note(nevptsolver,'Si Subspace: E = %.14f'%( Vi_e)) logger.timer(nevptsolver,'MPS NEVPT calculation time', *t0)
def DMRG_COMPRESS_NEVPT(mc, maxM=500, root=0, nevptsolver=None, tol=1e-7, nevpt_integral=None): if isinstance(nevpt_integral, str) and h5py.is_hdf5(nevpt_integral): nevpt_integral_file = os.path.abspath(nevpt_integral) mol = chkfile.load_mol(nevpt_integral_file) fh5 = h5py.File(nevpt_integral_file, 'r') ncas = fh5['mc/ncas'].value ncore = fh5['mc/ncore'].value nvirt = fh5['mc/nvirt'].value nelecas = fh5['mc/nelecas'].value nroots = fh5['mc/nroots'].value wfnsym = fh5['mc/wfnsym'].value fh5.close() else : mol = mc.mol ncas = mc.ncas ncore = mc.ncore nvirt = mc.mo_coeff.shape[1] - mc.ncas-mc.ncore nelecas = mc.nelecas nroots = mc.fcisolver.nroots wfnsym = mc.fcisolver.wfnsym nevpt_integral_file = None if nevptsolver is None: nevptsolver = default_nevpt_schedule(mc.fcisolver, maxM, tol) #nevptsolver.__dict__.update(mc.fcisolver.__dict__) nevptsolver.wfnsym = wfnsym nevptsolver.block_extra_keyword = mc.fcisolver.block_extra_keyword nevptsolver.nroots = nroots nevptsolver.executable = settings.BLOCKEXE_COMPRESS_NEVPT if nevptsolver.executable == getattr(mc.fcisolver, 'executable', None): logger.warn(mc, 'DMRG executable file for nevptsolver %s is the same ' 'to the executable file for DMRG solver %s. If they are ' 'both compiled by MPI compilers, they may cause error or ' 'random results in DMRG-NEVPT calculation.') nevpt_scratch = os.path.abspath(nevptsolver.scratchDirectory) dmrg_scratch = os.path.abspath(mc.fcisolver.scratchDirectory) # Integrals are not given by the kwarg nevpt_integral if nevpt_integral_file is None: nevpt_integral_file = os.path.join(nevpt_scratch, 'nevpt_perturb_integral') write_chk(mc, root, nevpt_integral_file) conf = dmrgci.writeDMRGConfFile(nevptsolver, nelecas, False, with_2pdm=False, extraline=['fullrestart','nevpt_state_num %d'%root]) with open(conf, 'r') as f: block_conf = f.readlines() block_conf = [l for l in block_conf if 'prefix' not in l] block_conf = ''.join(block_conf) with h5py.File(nevpt_integral_file) as fh5: if 'dmrg.conf' in fh5: del(fh5['dmrg.conf']) fh5['dmrg.conf'] = block_conf if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, 'Block Input conf') logger.debug1(nevptsolver, block_conf) t0 = (time.clock(), time.time()) # function nevpt_integral_mpi is called in this cmd cmd = ' '.join((nevptsolver.mpiprefix, os.path.realpath(os.path.join(__file__, '..', 'nevpt_mpi.py')), nevpt_integral_file, nevptsolver.executable, dmrg_scratch, nevpt_scratch)) logger.debug(nevptsolver, 'DMRG_COMPRESS_NEVPT cmd %s', cmd) try: output = subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError as err: logger.error(nevptsolver, cmd) raise err if nevptsolver.verbose >= logger.DEBUG1: logger.debug1(nevptsolver, open(os.path.join(nevpt_scratch, '0', 'dmrg.out')).read()) perturb_file = os.path.join(nevpt_scratch, '0', 'Perturbation_%d'%root) fh5 = h5py.File(perturb_file, 'r') Vi_e = fh5['Vi/energy'].value Vr_e = fh5['Vr/energy'].value fh5.close() logger.note(nevptsolver,'Nevpt Energy:') logger.note(nevptsolver,'Sr Subspace: E = %.14f'%( Vr_e)) logger.note(nevptsolver,'Si Subspace: E = %.14f'%( Vi_e)) logger.timer(nevptsolver,'MPS NEVPT calculation time', *t0) return perturb_file