Exemplo n.º 1
0
def find_escape_paths(minimum, potential, graph, ntries=1, push=1.e-2, push_minrms=1.e-2):
    raise Exception(
        "js850> this function doesn't work anymore since changing graph.addMinimum and addTransitionState.  It needs to be overhauled")
    print("Single ended search for minimum", minimum.id(), minimum.energy)

    search = DimerSearch(minimum.coords, potential, zeroEigenVecs=zeroEV_cluster)

    for i in range(ntries):

        x_ts, energy_ts, rms, tmp = _uphill_search(minimum.coords, search, push, push_minrms)
        ret1, ret2 = minima_from_ts(potential, x_ts, displace=1e-2)

        min1 = graph.addMinimum(ret1[1], ret1[0])
        min2 = graph.addMinimum(ret2[1], ret2[0])

        if not min1 is minimum and not min2 is minimum:
            print("Warning in single ended search: did not find initial minimum during quench from transition state")

        if min1 is min2:
            print("Warning in single ended search: downhill search from transistion state ended in same minimum")

        ts = graph.addTransitionState(energy_ts, x_ts, min1, min2)
        print("found transition state: ", min1.id(), min2.id(), min1.energy, ts.energy, min2.energy)

        search.findNextTS()
Exemplo n.º 2
0
def _refineTS(pot, coords, tsSearchParams=dict(), eigenvec0=None, pushoff_params=dict()):
    """
    find nearest transition state to NEB climbing image.  Then fall
    off the transition state to find the associated minima.
    
    This would naturally be a part of DoubleEndedConnect.  I separated it
    to make it more easily parallelizable.      
    """
    #run ts search algorithm
    kwargs = dict(tsSearchParams.items())
    ret = findTransitionState(coords, pot, eigenvec0=eigenvec0, **kwargs)
    
    #check to make sure it is a valid transition state 
    coords = ret.coords
    if not ret.success:
        logger.info("transition state search failed")
        return False, ret, None, None
        
    if ret.eigenval >= 0.:
        logger.info("transition state has positive lowest eigenvalue, skipping: %s %s %s", ret.eigenval, ret.energy, ret.rms)
        logger.info( "         not adding transition state")
        return False, ret, None, None
    
    #find the minima which this transition state connects
    logger.info("falling off either side of transition state to find new minima")
    ret1, ret2 = minima_from_ts(pot, coords, n = ret.eigenvec, \
        **pushoff_params)
#    print "testing", ret1.energy
    
    return True, ret, ret1, ret2
Exemplo n.º 3
0
def find_escape_paths(minimum,
                      potential,
                      graph,
                      ntries=1,
                      push=1.e-2,
                      push_minrms=1.e-2):
    raise Exception(
        "js850> this function doesn't work anymore since changing graph.addMinimum and addTransitionState.  It needs to be overhauled"
    )
    print "Single ended search for minimum", minimum.id(), minimum.energy

    search = DimerSearch(minimum.coords,
                         potential,
                         zeroEigenVecs=zeroEV_cluster)

    for i in xrange(ntries):

        x_ts, energy_ts, rms, tmp = _uphill_search(minimum.coords, search,
                                                   push, push_minrms)
        ret1, ret2 = minima_from_ts(potential, x_ts, displace=1e-2)

        min1 = graph.addMinimum(ret1[1], ret1[0])
        min2 = graph.addMinimum(ret2[1], ret2[0])

        if not min1 is minimum and not min2 is minimum:
            print "Warning in single ended search: did not find initial minimum during quench from transition state"

        if min1 is min2:
            print "Warning in single ended search: downhill search from transistion state ended in same minimum"

        ts = graph.addTransitionState(energy_ts, x_ts, min1, min2)
        print "found transition state: ", min1.id(), min2.id(
        ), min1.energy, ts.energy, min2.energy

        search.findNextTS()
Exemplo n.º 4
0
def _refineTS(pot,
              coords,
              tsSearchParams=None,
              eigenvec0=None,
              pushoff_params=None):
    """
    find nearest transition state to NEB climbing image.  Then fall
    off the transition state to find the associated minima.
    
    This would naturally be a part of DoubleEndedConnect.  I separated it
    to make it more easily parallelizable.      
    """
    if pushoff_params is None: pushoff_params = dict()
    if tsSearchParams is None: tsSearchParams = dict()
    # run ts search algorithm
    kwargs = dict(list(tsSearchParams.items()))
    ret = findTransitionState(coords, pot, eigenvec0=eigenvec0, **kwargs)

    # check to make sure it is a valid transition state
    coords = ret.coords
    if not ret.success:
        logger.info("transition state search failed")
        return False, ret, None, None

    if ret.eigenval >= 0.:
        logger.info(
            "transition state has positive lowest eigenvalue, skipping: %s %s %s",
            ret.eigenval, ret.energy, ret.rms)
        logger.info("         not adding transition state")
        return False, ret, None, None

    # find the minima which this transition state connects
    logger.info(
        "falling off either side of transition state to find new minima")
    ret1, ret2 = minima_from_ts(pot, coords, n=ret.eigenvec, **pushoff_params)

    return True, ret, ret1, ret2