예제 #1
0
파일: p_dmrg.py 프로젝트: zzy2014/pyscf
 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)
예제 #2
0
파일: p_dmrg.py 프로젝트: NuturesH/pyscf-1
  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)
예제 #3
0
파일: p_dmrg.py 프로젝트: chrinide/pyscf
 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)
예제 #4
0
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)
예제 #5
0
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
예제 #6
0
파일: nevpt_mpi.py 프로젝트: yfyh2013/pyscf
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)
예제 #7
0
파일: nevpt_mpi.py 프로젝트: eronca/pyscf
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)
예제 #8
0
파일: nevpt_mpi.py 프로젝트: chrinide/pyscf
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