예제 #1
0
def get_ts_ifreq(xcc, gcc, Fcc, E, tcommon):
    ch, mtp, atonums, masses, mu = tcommon
    ts = Molecule()
    ts.set(xcc, atonums, ch, mtp, E, gcc, Fcc, masses)
    ts.prep()
    ts.setup(mu)
    ts.ana_freqs()
    [(ifreq, evec)] = ts._ccimag
    return ifreq, mu
예제 #2
0
파일: adipot.py 프로젝트: gharib85/Pilgrim
def path2vadi(tcommon,
              drst,
              Eref=None,
              ics=None,
              boolint=False,
              lowfq={},
              freqscal=1.0):
    '''
    lowfq in case of imaginary frequencies
    '''
    if boolint in [False, "no", "No", "n", "N", None]: boolint = False
    elif boolint in [True, "yes", "YES", "y", "Y"]: boolint = True

    if boolint and ics in [None, False, []]: raise Exc.NoICS(Exception)

    ch, mtp, atnums, masses, mu = tcommon

    # Sorted labels (by s)
    slabels = sd.sorted_points(drst, hess=True)

    # Reference energy
    if Eref is None:
        lbw, lfw, sbw, sfw, Ebw, Efw = sd.rstlimits(drst)
        Eref = Ebw

    # Independent variable
    data_x = [drst[label][0] for label in slabels]

    # mep energy
    listV0 = [drst[label][1] - Eref for label in slabels]

    # Dependent variable (cc)
    lcc_tzpe, lcc_frqs, lcc_Vadi = [], [], []
    lic_tzpe, lic_frqs, lic_Vadi = [], [], []
    dMols = {}
    for label in slabels:
        # data in drst
        s_i, E_i, xms_i, gms_i, Fms_i, v0_i, v1_i, t_i = drst[label]
        # project gradient
        if s_i == 0.0: bool_pg = False
        else: bool_pg = True
        # lowfq
        if s_i == 0: dlowfq = {}
        elif s_i < 0: dlowfq = lowfq.get("bw", {})
        elif s_i > 0: dlowfq = lowfq.get("fw", {})
        # mass-scaled --> Cartesian coords
        xcc = fncs.ms2cc_x(xms_i, masses, mu)
        gcc = fncs.ms2cc_g(gms_i, masses, mu)
        Fcc = fncs.ms2cc_F(Fms_i, masses, mu)
        # create Molecule instance
        mol = Molecule()
        mol.set(xcc, atnums, ch, mtp, E_i, gcc, Fcc, masses)
        mol.prep()
        mol.set_fscal(freqscal)
        mol.setup(mu, projgrad=bool_pg)
        mol.clean_freqs("cc")  # it may be needed with orca
        mol.deal_lowfq(dlowfq, "cc")  # deal with low frequencies
        mol.ana_freqs("cc")  # calculate zpe
        # append data
        lcc_tzpe.append(float(mol._cczpe))
        lcc_Vadi.append(mol._ccV1 - Eref)
        lcc_frqs.append(list(mol._ccfreqs))
        # internal coordinates
        if boolint:
            mol.icfreqs(ics, bool_pg)
            mol.deal_lowfq(dlowfq, "ic")
            mol.ana_freqs("ic")
            # append data
            lic_tzpe.append(float(mol._iczpe))
            lic_Vadi.append(mol._icV1 - Eref)
            lic_frqs.append(list(mol._icfreqs))
        # save instance
        dMols[label] = (s_i, mol)

    tuple_cc = (data_x, lcc_frqs, lcc_tzpe)
    tuple_ic = (data_x, lic_frqs, lic_tzpe)
    # Generate splines and setup
    Vadi_cc = VadiSpline(data_x, lcc_Vadi)
    if boolint: Vadi_ic = VadiSpline(data_x, lic_Vadi)
    else: Vadi_ic = None
    # Return data
    return dMols, Vadi_cc, Vadi_ic, tuple_cc, tuple_ic, listV0