Esempio n. 1
0
def dr(traj='poscar.gen', batch_size=1, nn=False):
    ffield = 'ffield.json' if nn else 'ffield'
    atoms = read(traj)

    e, ei = [], []
    ir = IRFF(atoms=atoms, libfile=ffield, nn=False, bo_layer=[8, 4])

    ir.get_potential_energy(atoms)
Esempio n. 2
0
def g(gen='poscar.gen'):
    atoms = read(gen)
    ir = IRFF(atoms=atoms, libfile='ffield.json', nn=True, autograd=True)
    ir.calculate(atoms)
    print(ir.grad)

    ir_ = IRFF_TF(atoms=atoms, libfile='ffield.json', nn=True)
    ir_.calculate(atoms)
    print(ir_.grad.numpy())
Esempio n. 3
0
def md(gen='poscar.gen', index=0, totstep=100):
    atoms = read(gen, index=index)
    atoms.calc = IRFF(atoms=atoms, libfile='ffield.json', rcut=None, nn=True)
    # dyn = BFGS(atoms)
    dyn = VelocityVerlet(atoms, 0.1 * units.fs)  # 5 fs time step.

    def printenergy(a=atoms):
        """Function to print the potential, kinetic and total energy"""
        natom = len(a)
        epot = a.get_potential_energy() / natom
        ekin = a.get_kinetic_energy() / natom
        T = ekin / (1.5 * units.kB)
        try:
            assert T <= 8000.0, 'Temperature goes too high!'
        except:
            print('Temperature goes too high, stop at step %d.' % dyn.nsteps)
            dyn.max_steps = dyn.nsteps - 1
        # print(a.get_forces())
        print('Energy per atom: Epot = %.3feV  Ekin = %.3feV (T=%3.0fK)  '
              'Etot = %.3feV' % (epot, ekin, T, epot + ekin))

    traj = Trajectory('md.traj', 'w', atoms)
    dyn = VelocityVerlet(atoms, 0.1 * units.fs)  # 5 fs time step.

    dyn.attach(printenergy, interval=1)
    dyn.attach(traj.write, interval=1)
    dyn.run(totstep)
Esempio n. 4
0
def dt(traj='siesta.traj', batch_size=1, nn=True, frame=0):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]
    his = TrajectoryWriter('tmp.traj', mode='w')
    his.write(atoms=atoms)
    his.close()

    from irff.irff import IRFF
    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn)
    ir.get_potential_energy(atoms)
    eb = ir.Ebond.numpy()

    et = ir.etor.numpy()
    ef = ir.efcon.numpy()
    f10 = ir.f_10.numpy()
    f11 = ir.f_11.numpy()

    sijk = ir.s_ijk.numpy()
    sjkl = ir.s_jkl.numpy()

    f = ir.fijkl.numpy()
    v1 = ir.v1.numpy()
    v2 = ir.v2.numpy()
    v3 = ir.v3.numpy()

    expv2 = ir.expv2.numpy()

    boij = ir.botij.numpy()
    bojk = ir.botjk.numpy()
    bokl = ir.botkl.numpy()

    cosw = ir.cos_w.numpy()
    cos2w = ir.cos2w.numpy()
    w = ir.w.numpy()

    Etor = ir.Etor.numpy()
    del IRFF

    from irff.reax import ReaxFF
    rn = ReaxFF(libfile=ffield,
                direcs={'tmp': 'tmp.traj'},
                dft='siesta',
                opt=[],
                optword='nocoul',
                batch_size=batch_size,
                atomic=True,
                clip_op=False,
                InitCheck=False,
                nn=nn,
                bo_layer=[9, 2],
                pkl=False,
                to_train=False)
    molecules = rn.initialize()
    # rn.calculate(rn.p,rn.m)
    rn.session(learning_rate=3.0 - 4, method='AdamOptimizer')

    mol = 'tmp'
    torlab = rn.lk.torlab
    tors = []
    for tor in ir.tors:
        tors.append(list(tor))
        print(tor)

    eb_ = rn.get_value(rn.ebond[mol])
    et_ = rn.get_value(rn.ETOR)
    ef_ = rn.get_value(rn.Efcon)
    f10_ = rn.get_value(rn.f_10)
    f11_ = rn.get_value(rn.f_11)

    sijk_ = rn.get_value(rn.s_ijk)
    sjkl_ = rn.get_value(rn.s_jkl)

    f_ = rn.get_value(rn.fijkl)

    boij_ = rn.get_value(rn.BOtij)
    bojk_ = rn.get_value(rn.BOtjk)
    bokl_ = rn.get_value(rn.BOtkl)

    v1_ = rn.get_value(rn.v1)
    v2_ = rn.get_value(rn.v2)
    v3_ = rn.get_value(rn.v3)

    expv2_ = rn.get_value(rn.expv2)

    cosw_ = rn.get_value(rn.cos_w)
    cos2w_ = rn.get_value(rn.cos2w)
    w_ = rn.get_value(rn.w)

    for tor in rn.tors:
        for a_ in range(rn.ntor[tor]):
            a = torlab[tor][a_][1:]

            if a not in tors:
                a.reverse()
            i, j, k, l = a
            if a in tors:
                ai = tors.index(a)
                # if abs(et_[tor][a_][0]-et[ai])>0.0001:
                print(
                    '-  %2d%s-%2d%s-%2d%s-%2d%s:' %
                    (i, ir.atom_name[i], j, ir.atom_name[j], k,
                     ir.atom_name[k], l, ir.atom_name[l]),
                    'etor: %10.8f  %10.8f' % (et_[tor][a_][0], et[ai]),
                    'sijk: %10.8f  %10.8f' % (sijk_[tor][a_][0], sijk[ai]),
                    'sjkl: %10.8f  %10.8f' % (sjkl_[tor][a_][0], sjkl[ai]),
                    'boij: %10.8f  %10.8f' % (boij_[tor][a_][0], boij[ai]),
                    'bojk: %10.8f  %10.8f' % (bojk_[tor][a_][0], bojk[ai]),
                    'bokl: %10.8f  %10.8f' % (bokl_[tor][a_][0], bokl[ai]),
                    'fijkl: %10.8f  %10.8f' % (f_[tor][a_][0], f[ai]),
                    'v1: %10.8f  %10.8f' % (v1_[tor][a_][0], v1[ai]),
                    'v2: %10.8f  %10.8f' % (v2_[tor][a_][0], v2[ai]),
                    'v3: %10.8f  %10.8f' % (v3_[tor][a_][0], v3[ai]),
                    'expv2: %10.8f  %10.8f' % (expv2_[tor][a_][0], expv2[ai]),
                    'ptor1: %10.8f  %10.8f' %
                    (rn.p_['tor1_' + tor], ir.P['tor1'][ai]),
                    # 'cosw: %10.8f  %10.8f' %(cosw_[tor][a_][0],cosw[ai]),
                    # 'cos2w: %10.8f  %10.8f' %(cos2w_[tor][a_][0],cos2w[ai]),
                    #  'v1: %10.8f  %10.8f' %(0.5*rn.p_['V1_'+tor]*(1.0+cosw_[tor][a_][0]),
                    #                         0.5*ir.P['V1'][ai]*(1.0+cosw[ai])),
                    #  'w: %10.8f  %10.8f' %(w_[tor][a_][0],w[ai]),
                    # 'efcon: %10.8f  %10.8f' %(ef_[tor][a_][0],ef[ai]),
                    #  'f_10: %10.8f  %10.8f' %(f10_[tor][a_][0],f10[ai]),
                    #  'f_11: %10.8f  %10.8f' %(f11_[tor][a_][0],f11[ai]),
                )
    Etor_ = rn.get_value(rn.etor)
    print('\n-  torsion energy:', Etor, Etor_[mol][0], end='\n')
    print('\n-  Bond energy:', eb, eb_, end='\n')
    del ReaxFF
Esempio n. 5
0
def da(traj='siesta.traj', batch_size=1, nn=False, frame=0):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]
    his = TrajectoryWriter('tmp.traj', mode='w')
    his.write(atoms=atoms)
    his.close()

    ir = IRFF(atoms=atoms, libfile=ffield, nn=False, bo_layer=[8, 4])
    ir.get_potential_energy(atoms)

    rn = ReaxFF(libfile=ffield,
                direcs={'tmp': 'tmp.traj'},
                dft='siesta',
                opt=[],
                optword='nocoul',
                batch_size=batch_size,
                atomic=True,
                clip_op=False,
                InitCheck=False,
                nn=nn,
                pkl=False,
                to_train=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    anglab = rn.lk.anglab
    angs = []
    for ang in ir.angs:
        angs.append(list(ang))

    ea_ = rn.get_value(rn.EANG)
    ea = ir.eang.numpy()
    f7_ = rn.get_value(rn.f_7)
    f7 = ir.f_7.numpy()
    f8_ = rn.get_value(rn.f_8)
    f8 = ir.f_8.numpy()
    expang_ = rn.get_value(rn.expang)
    expang = ir.expang.numpy()

    expaij_ = rn.get_value(rn.expaij)
    expaij = ir.expaij.numpy()

    expajk_ = rn.get_value(rn.expajk)
    expajk = ir.expajk.numpy()

    theta_ = rn.get_value(rn.theta)
    theta = ir.theta.numpy()
    theta0_ = rn.get_value(rn.theta0)
    theta0 = ir.thet0.numpy()

    sbo3_ = rn.get_value(rn.SBO3)
    sbo3 = ir.SBO3.numpy()

    fa = open('ang.txt', 'w')
    for ang in rn.angs:
        for a_ in range(rn.nang[ang]):
            a = anglab[ang][a_][1:]

            if a not in angs:
                a.reverse()
            i, j, k = a
            if a in angs:
                ai = angs.index(a)
                print('-  %2d%s-%2d%s-%2d%s:' %
                      (i, ir.atom_name[i], j, ir.atom_name[j], k,
                       ir.atom_name[k]),
                      'eang: %10.8f  %10.8f' % (ea_[ang][a_][0], ea[ai]),
                      'f7: %10.8f  %10.8f' % (f7_[ang][a_][0], f7[ai]),
                      'f8: %10.8f  %10.8f' % (f8_[ang][a_][0], f8[ai]),
                      'expang: %10.8f  %10.8f' %
                      (expang_[ang][a_][0], expang[ai]),
                      'expaij: %10.8f  %10.8f' %
                      (expaij_[ang][a_][0], expaij[ai]),
                      'expajk: %10.8f  %10.8f' %
                      (expajk_[ang][a_][0], expajk[ai]),
                      'theta: %10.8f  %10.8f' %
                      (theta_[ang][a_][0], theta[ai]),
                      'sbo3: %10.8f  %10.8f' % (sbo3_[ang][a_][0], sbo3[ai]),
                      'theta0: %10.8f  %10.8f' %
                      (theta0_[ang][a_][0], theta0[ai]),
                      file=fa)
            else:
                print(
                    '-  %2d%s-%2d%s-%2d%s:' %
                    (i, ir.atom_name[i], j, ir.atom_name[j], k,
                     ir.atom_name[k]), 'eang: %10.8f' % (ea_[ang][a_][0]),
                    'f7: %10.8f' % (f7_[ang][a_][0]),
                    'f8: %10.8f' % (f8_[ang][a_][0]),
                    'expang: %10.8f' % (expang_[ang][a_][0]),
                    'expang: %10.8f' % (expang_[ang][a_][0]),
                    'expaij: %10.8f' % (expaij_[ang][a_][0]),
                    'expajk: %10.8f' % (expajk_[ang][a_][0]), 'theta: %10.8f' %
                    (theta_[ang][a_][0]), 'sbo3: %10.8f' % (sbo3_[ang][a_][0]),
                    'theta0: %10.8f' % (theta0_[ang][a_][0]))
    fa.close()
    print('\n-  angel energy:',
          ir.Eang.numpy(),
          rn.eang[mol].numpy()[0],
          end='\n')
Esempio n. 6
0
def dl(traj='siesta.traj', batch_size=1, nn=False, frame=0):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]
    his = TrajectoryWriter('tmp.traj', mode='w')
    his.write(atoms=atoms)
    his.close()

    ir = IRFF(atoms=atoms, libfile=ffield, nn=False, bo_layer=[8, 4])

    ir.get_potential_energy(atoms)
    el = ir.elone.numpy()
    Dle = ir.Delta_e.numpy()
    Dlp = ir.Delta_lp.numpy()
    de = ir.DE.numpy()
    nlp = ir.nlp.numpy()
    elp = ir.explp.numpy()
    eu = ir.eunder.numpy()
    eu1 = ir.eu1.numpy()
    eu2 = ir.eu2.numpy()
    eu3 = ir.expeu3.numpy()

    rn = ReaxFF(libfile=ffield,
                direcs={'tmp': 'tmp.traj'},
                dft='siesta',
                opt=[],
                optword='nocoul',
                batch_size=batch_size,
                atomic=True,
                clip_op=False,
                InitCheck=False,
                nn=nn,
                pkl=False,
                to_train=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    el_ = rn.get_value(rn.EL)
    Dle_ = rn.get_value(rn.Delta_e)
    Dlp_ = rn.get_value(rn.Delta_lp)
    de_ = rn.get_value(rn.DE)
    nlp_ = rn.get_value(rn.nlp)
    elp_ = rn.get_value(rn.explp)

    eu_ = rn.get_value(rn.EUN)
    eu1_ = rn.get_value(rn.eu1)
    eu2_ = rn.get_value(rn.eu2)
    eu3_ = rn.get_value(rn.expeu3)

    alab = rn.lk.atlab
    bosi = ir.bosi.numpy()

    for i in range(ir.natom):
        a = ir.atom_name[i]
        al = [mol, i]
        na = alab[a].index(al)
        print(
            '-  %d %s:' % (i, ir.atom_name[i]),
            'elone: %10.8f  %10.8f' % (el_[a][na], el[i]),
            #  'Delta_e: %10.8f  %10.8f' %(Dle_[a][na],Dle[i]),
            # 'Delta_lp: %10.8f  %10.8f' %(Dlp_[a][na],Dlp[i]),
            #      'nlp: %10.8f  %10.8f' %(nlp_[a][na],nlp[i]),
            'eunder: %10.8f  %10.8f' % (eu_[a][na], eu[i]),
            #    'eu1: %10.8f  %10.8f' %(eu1_[a][na],eu1[i]),
            'eu2: %10.8f  %10.8f' % (eu2_[a][na], eu2[i]),
            'eu3: %10.8f  %10.8f' % (eu3_[a][na], eu3[i]))
    print('\n-  under energy:',
          ir.Eunder.numpy(),
          rn.eunder[mol].numpy()[0],
          end='\n')
Esempio n. 7
0
def e(traj='siesta.traj', batch_size=50, nn=True):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    e = []
    eb, el, eo, eu = [], [], [], []
    ea, ep, etc = [], [], []
    et, ef = [], []
    ev, eh, ec = [], [], []

    from irff.irff import IRFF
    ir = IRFF(atoms=images[0], libfile=ffield, nn=nn)

    for i, atoms in enumerate(images):
        ir.get_potential_energy(atoms)
        e.append(ir.E.numpy())
        eb.append(ir.Ebond.numpy())
        el.append(ir.Elone.numpy())
        eo.append(ir.Eover.numpy())
        eu.append(ir.Eunder.numpy())
        ea.append(ir.Eang.numpy())
        ep.append(ir.Epen.numpy())
        et.append(ir.Etor.numpy())
        ef.append(ir.Efcon.numpy())
        etc.append(ir.Etcon.numpy())
        ev.append(ir.Evdw.numpy())
        eh.append(ir.Ehb.numpy())
        ec.append(ir.Ecoul.numpy())

    from irff.mpnn import MPNN
    rn = MPNN(libfile=ffield,
              direcs={'tmp': traj},
              dft='siesta',
              opt=[],
              optword='nocoul',
              batch_size=batch_size,
              atomic=True,
              clip_op=False,
              InitCheck=False,
              nn=nn,
              bo_layer=[9, 2],
              pkl=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    e_ = rn.get_value(rn.E[mol])
    eb_ = rn.get_value(rn.ebond[mol])
    el_ = rn.get_value(rn.elone[mol])
    eu_ = rn.get_value(rn.eunder[mol])
    eo_ = rn.get_value(rn.eover[mol])
    ea_ = rn.get_value(rn.eang[mol])
    ep_ = rn.get_value(rn.epen[mol])
    etc_ = rn.get_value(rn.tconj[mol])
    et_ = rn.get_value(rn.etor[mol])
    ef_ = rn.get_value(rn.efcon[mol])
    ev_ = rn.get_value(rn.evdw[mol])
    ec_ = rn.get_value(rn.ecoul[mol])
    eh_ = rn.get_value(rn.ehb[mol])

    e_reax = {
        'Energy': e,
        'Ebond': eb,
        'Eunger': eu,
        'Eover': eo,
        'Eang': ea,
        'Epen': ep,
        'Elone': el,
        'Etcon': etc,
        'Etor': et,
        'Efcon': ef,
        'Evdw': ev,
        'Ecoul': ec,
        'Ehbond': eh
    }
    e_irff = {
        'Energy': e_,
        'Ebond': eb_,
        'Eunger': eu_,
        'Eover': eo_,
        'Eang': ea_,
        'Epen': ep_,
        'Elone': el_,
        'Etcon': etc_,
        'Etor': et_,
        'Efcon': ef_,
        'Evdw': ev_,
        'Ecoul': ec_,
        'Ehbond': eh_
    }

    for key in e_reax:
        plt.figure()
        plt.ylabel('%s (eV)' % key)
        plt.xlabel('Step')

        plt.plot(e_reax[key],
                 alpha=0.01,
                 linestyle='-.',
                 marker='o',
                 markerfacecolor='none',
                 markeredgewidth=1,
                 markeredgecolor='b',
                 markersize=4,
                 color='blue',
                 label='ReaxFF')
        plt.plot(e_irff[key],
                 alpha=0.01,
                 linestyle=':',
                 marker='^',
                 markerfacecolor='none',
                 markeredgewidth=1,
                 markeredgecolor='red',
                 markersize=4,
                 color='red',
                 label='IRFF')
        plt.legend(loc='best',
                   edgecolor='yellowgreen')  # lower left upper right
        plt.savefig('%s.eps' % key)
        plt.close()
Esempio n. 8
0
def db(gen='C3H7O1-0.traj', batch_size=50, nn=True, frame=7):
    ffield = 'ffield.json' if nn else 'ffield'
    # atoms  = read(gen,index=1)
    images = Trajectory(gen)
    atoms = images[frame]

    # his    = TrajectoryWriter('tmp.traj',mode='w')
    # calc   = SinglePointCalculator(atoms,energy=0.0,free_energy=0.0)
    # atoms.set_calculator(calc)
    # his.write(atoms=atoms)
    # his.close()

    from irff.irff import IRFF
    e, ei = [], []
    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn)

    ir.get_potential_energy(atoms)

    ei.append(ir.Ebond)
    ebond = ir.ebond.numpy()

    from irff.mpnn import MPNN
    rn = MPNN(libfile=ffield,
              direcs={'tmp': gen},
              dft='siesta',
              opt=[],
              optword='nocoul',
              batch_size=batch_size,
              atomic=True,
              clip_op=False,
              InitCheck=False,
              nn=nn,
              bo_layer=[9, 2],
              pkl=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    er = rn.get_value(rn.ebond[mol])
    blab = rn.lk.bdlab

    bosi = ir.bosi.numpy()
    bopsi = ir.bop_si.numpy()
    boppi = ir.bop_pi.numpy()
    boppp = ir.bop_pp.numpy()

    bopow3 = ir.bopow3.numpy()
    eterm3 = ir.eterm3.numpy()

    bop = ir.bop.numpy()
    bo = ir.bo0.numpy()

    eterm1 = ir.eterm1.numpy()
    bopow1 = ir.bopow1.numpy()
    bodiv1 = ir.bodiv1.numpy()

    r = ir.r.numpy()
    # F      = ir.F.numpy()
    # Fi     = ir.Fi.numpy()
    # Fj     = ir.Fj.numpy()
    D_ = rn.get_value(rn.Deltap)
    D = ir.Deltap.numpy()

    for bd in rn.bonds:
        for nb in range(rn.nbd[bd]):
            ebd = rn.get_value(rn.EBD[bd])
            mol_, i, j = blab[bd][nb]
            bosi_ = rn.get_value(rn.bosi[bd])
            bopsi_ = rn.get_value(rn.bop_si[bd])
            boppi_ = rn.get_value(rn.bop_pi[bd])
            boppp_ = rn.get_value(rn.bop_pp[bd])

            bopow3_ = rn.get_value(rn.bopow3[bd])
            eterm3_ = rn.get_value(rn.eterm3[bd])

            bop_ = rn.get_value(rn.bop[bd])
            bo_ = rn.get_value(rn.bo0[bd])

            eterm1_ = rn.get_value(rn.eterm1[bd])
            bopow1_ = rn.get_value(rn.bopow1[bd])
            bodiv1_ = rn.get_value(rn.bodiv1[bd])

            rbd = rn.get_value(rn.rbd[bd])

            # if abs(bo_[nb][0]-bo[i][j])>0.00001:
            print(
                '-  %s %2d %2d:' % (bd, i, j),
                'rbd %10.7f %10.7f' % (rbd[nb][frame], r[i][j]),
                'bop %10.7f %10.7f' % (bop_[nb][frame], bop[i][j]),
                'Di %10.7f %10.7f' % (D_[i][frame], D[i]),
                'Dj %10.7f %10.7f' % (D_[j][frame], D[j]),
                'bo %10.7f %10.7f' % (bo_[nb][frame], bo[i][j]),
                # 'F %10.7f %10.7f' %(F_[nb][0],F[i][j]),
                # 'Fi %10.7f %10.7f' %(Fi_[nb][0],Fi[i][j]),
                # 'Fj %10.7f %10.7f' %(Fj_[nb][0],Fj[i][j]),
                'ebond %10.7f %10.7f' % (ebd[nb][frame], ebond[i][j]))

    rcbo = rn.get_value(rn.rc_bo)
    eb = rn.get_value(rn.ebond[mol])
    # print(rcbo)
    print('\n-  bond energy:', ir.Ebond.numpy(), eb[frame], end='\n')
Esempio n. 9
0
def e(traj='md.traj', nn=True):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[0]
    e, e_ = [], []
    eb, el, eo, eu = [], [], [], []
    ea, ep, etc = [], [], []
    et, ef = [], []
    ev, eh, ec = [], [], []

    eb_, el_, eo_, eu_ = [], [], [], []
    ea_, ep_, etc_ = [], [], []
    et_, ef_ = [], []
    ev_, eh_, ec_ = [], [], []

    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn, autograd=False)

    for i, atoms in enumerate(images):
        ir.calculate(atoms)
        e.append(ir.E)
        eb.append(ir.Ebond.numpy())
        el.append(ir.Elone.numpy())
        eo.append(ir.Eover.numpy())
        eu.append(ir.Eunder.numpy())
        ea.append(ir.Eang.numpy())
        ep.append(ir.Epen.numpy())
        et.append(ir.Etor.numpy())
        ef.append(ir.Efcon.numpy())
        etc.append(ir.Etcon.numpy())
        ev.append(ir.Evdw.numpy())
        eh.append(ir.Ehb.numpy())
        ec.append(ir.Ecoul.numpy())

    ir_ = IRFF_NP(atoms=atoms, libfile=ffield, nn=nn)

    for i, atoms in enumerate(images):
        ir_.calculate(atoms)
        e_.append(ir_.E)
        eb_.append(ir_.Ebond)
        el_.append(ir_.Elone)
        eo_.append(ir_.Eover)
        eu_.append(ir_.Eunder)
        ea_.append(ir_.Eang)
        ep_.append(ir_.Epen)
        et_.append(ir_.Etor)
        ef_.append(ir_.Efcon)
        etc_.append(ir_.Etcon)
        ev_.append(ir_.Evdw)
        eh_.append(ir_.Ehb)
        ec_.append(ir_.Ecoul)

    e_irffnp = {
        'Energy': e,
        'Ebond': eb,
        'Eunger': eu,
        'Eover': eo,
        'Eang': ea,
        'Epen': ep,
        'Elone': el,
        'Etcon': etc,
        'Etor': et,
        'Efcon': ef,
        'Evdw': ev,
        'Ecoul': ec,
        'Ehbond': eh
    }
    e_irff = {
        'Energy': e_,
        'Ebond': eb_,
        'Eunger': eu_,
        'Eover': eo_,
        'Eang': ea_,
        'Epen': ep_,
        'Elone': el_,
        'Etcon': etc_,
        'Etor': et_,
        'Efcon': ef_,
        'Evdw': ev_,
        'Ecoul': ec_,
        'Ehbond': eh_
    }

    for key in e_irffnp:
        plt.figure()
        plt.ylabel('%s (eV)' % key)
        plt.xlabel('Step')

        plt.plot(e_irffnp[key],
                 alpha=0.01,
                 linestyle='-.',
                 marker='o',
                 markerfacecolor='none',
                 markeredgewidth=1,
                 markeredgecolor='b',
                 markersize=4,
                 color='blue',
                 label='IRFF_NP')
        plt.plot(e_irff[key],
                 alpha=0.01,
                 linestyle=':',
                 marker='^',
                 markerfacecolor='none',
                 markeredgewidth=1,
                 markeredgecolor='red',
                 markersize=4,
                 color='red',
                 label='IRFF')
        plt.legend(loc='best',
                   edgecolor='yellowgreen')  # lower left upper right
        plt.savefig('%s.eps' % key)
        plt.close()
Esempio n. 10
0
def BDE(traj='c2h6-CC.traj', iatom=0, jatom=3):
    images = Trajectory(traj)
    e, ei, ei_, ebud, d_irff, eg, erdx, d_reax = [], [], [], [], [], [], [], []

    ir_mpnn = IRFF(atoms=images[0], libfile='ffield.json', nn=True)
    # ir_mat  = IRFF(atoms=images[0],libfile='ffield.reax.mattsson',nn=False)
    ir_reax = IRFF(atoms=images[0], libfile='ffield', nn=False)

    r, v = [], []
    for i, atoms in enumerate(images):
        if i % 2 != 0:
            continue
        emp = ir_mpnn.get_potential_energy(atoms)
        r_ = ir_mpnn.r[iatom][jatom].detach().numpy()

        # if r_>1.7:
        #    continue

        e.append(atoms.get_potential_energy())
        ei.append(emp)
        ei_.append(ir_reax.get_potential_energy(atoms))
        eg.append(get_gulp_energy(atoms, lib='reax_mat'))
        ebud.append(get_gulp_energy(atoms, lib='reax_bud'))
        # erdx.append(get_gulp_energy(atoms,lib='reax_rdx'))

        d_irff.append(abs(e[-1] - ei[-1]))
        d_reax.append(abs(e[-1] - ei_[-1]))

        v.append(atoms.get_volume())
        r.append(r_)
        print(' * energy: ', e[-1], ei[-1], ei_[-1], d_irff[-1], ' radius: ',
              r[-1])

        # stress = atoms.get_stress()
        # print(stress)

    print(' * mean difference: ', np.mean(d_irff), np.mean(d_reax))
    e_min = min(e)
    e_max = max(e)
    e = np.array(e) - e_min

    ei = np.array(ei) - min(ei)
    ei_ = np.array(ei_) - min(ei_)
    ebud = np.array(ebud) - min(ebud)
    eg = np.array(eg) - min(eg)
    # erdx = np.array(erdx) - min(erdx)
    plt.figure()
    plt.ylabel(r'$Energy$ ($eV$)')
    plt.xlabel(r'$Radius$ ($\AA$)')
    # plt.xlim(0,i)
    # plt.ylim(0,np.max(hist)+0.01)

    plt.plot(r,
             ei,
             alpha=0.9,
             linestyle='-',
             marker='o',
             markerfacecolor='none',
             markeredgecolor='k',
             markersize=5,
             color='k',
             label='IRFF(MPNN)')

    plt.plot(r,
             e,
             alpha=0.9,
             linestyle='-',
             marker='s',
             markerfacecolor='none',
             markeredgecolor='r',
             markersize=5,
             color='r',
             label='DFT(SIESTA)')

    plt.plot(r,
             ei_,
             alpha=0.9,
             linestyle='-',
             marker='^',
             markerfacecolor='none',
             markeredgecolor='b',
             markersize=5,
             color='b',
             label='ReaxFF(trained)')

    plt.plot(r,
             ebud,
             alpha=0.9,
             linestyle='-',
             marker='+',
             markerfacecolor='none',
             markeredgecolor='g',
             markersize=5,
             color='g',
             label='ReaxFF(Thompson)')

    plt.plot(r,
             eg,
             alpha=0.9,
             linestyle='-',
             marker='v',
             markerfacecolor='none',
             markeredgecolor='mediumslateblue',
             markersize=5,
             color='mediumslateblue',
             label='ReaxFF(Mattsson)')

    # plt.plot(r,eg,alpha=0.9,
    #          linestyle='-',marker='d',markerfacecolor='none',markeredgecolor='steelblue',
    #          markersize=5,
    #          color='steelblue',label='ReaxFF(RDX)')
    err = np.abs(ei - e)
    err_ = np.abs(ei_ - e)

    plt.fill_between(r, e - err, e + err, color='darkorange', alpha=0.2)

    plt.fill_between(
        r,
        e - err_,
        e + err_,
        color='palegreen',  # palegreen
        alpha=0.2)

    plt.text(0.0,
             e_max,
             '%.3f   ' % e_min,
             fontdict={
                 'size': 10.5,
                 'color': 'k'
             })
    plt.legend(loc='best', edgecolor='yellowgreen')  # lower left upper right
    plt.savefig('Energy.svg', transparent=True)
    plt.close()
Esempio n. 11
0
#!/usr/bin/env python
from ase.io import read
from ase.units import kJ  # ,GPa
from ase.eos import EquationOfState
from ase.optimize import BFGS, FIRE
from irff.md import opt
from irff.irff import IRFF
from ase.io.trajectory import Trajectory
import matplotlib.pyplot as plt

images = Trajectory('pre_opt.traj', mode='r')

ir = IRFF(atoms=images[0], libfile='ffield.json', rcut=None, nn=True)
GPa = 1.60217662 * 1.0e2

v_, p = [], []
v0 = images[0].get_volume()

for atoms_ in images:
    ir.calculate(atoms=atoms_, CalStress=True)
    stress = ir.results['stress']

    nonzero = 0
    stre_ = 0.0
    for _ in range(3):
        if abs(stress[_]) > 0.0000001:
            nonzero += 1
            stre_ += -stress[_]
    pressure = stre_ * GPa / nonzero

    p.append(pressure)
Esempio n. 12
0
def e(traj='eos_dft.traj', batch_size=100):
    images = Trajectory(traj)
    e, ei, ei_, diff = [], [], [], []

    ir_mpnn = IRFF(atoms=images[0], libfile='ffield.json', nn=True)
    ir_mpnn.get_potential_energy(images[0])

    ir_reax = IRFF(atoms=images[0], libfile='ffield', nn=False)
    ir_reax.get_potential_energy(images[0])

    v = []
    for i, atoms in enumerate(images):
        e.append(atoms.get_potential_energy())
        ei.append(ir_mpnn.get_potential_energy(atoms))
        ei_.append(ir_reax.get_potential_energy(atoms))
        diff.append(abs(e[-1] - ei[-1]))
        print(' * energy: ', e[-1], ei[-1], ei_[-1], diff[-1])
        v.append(atoms.get_volume())
        # stress = atoms.get_stress()
        # print(stress)

    print(' * mean difference: ', np.mean(diff))
    e_min = min(e)
    e_max = max(e)
    e = np.array(e) - e_min
    e_min = min(ei)
    ei = np.array(ei) - e_min

    e_min = min(ei_)
    ei_ = np.array(ei_) - e_min

    plt.figure()
    plt.ylabel(r'$Energy$ ($eV$)')
    plt.xlabel(r'$Volume$ ($\AA^3$)')
    # plt.xlim(0,i)
    # plt.ylim(0,np.max(hist)+0.01)

    plt.plot(v,
             ei,
             alpha=0.9,
             linestyle='-',
             marker='o',
             markerfacecolor='k',
             markersize=5,
             color='k',
             label='IRFF(MPNN)')

    # plt.plot(v,ei,alpha=0.9,
    #          linestyle='-',marker='^',markerfacecolor='none',
    #          markeredgewidth=1,markeredgecolor='blue',markersize=5,
    #          color='blue',label='IRFF')

    err = np.abs(ei - e)
    err_ = np.abs(ei_ - e)

    plt.errorbar(v,
                 e,
                 yerr=err,
                 fmt='s',
                 ecolor='r',
                 color='r',
                 ms=6,
                 markerfacecolor='none',
                 mec='r',
                 elinewidth=2,
                 capsize=2,
                 label='DFT (SIESTA)')

    plt.plot(v,
             ei_,
             alpha=0.9,
             linestyle='-',
             marker='^',
             markerfacecolor='b',
             markersize=5,
             color='b',
             label='ReaxFF(trained)')

    plt.fill_between(v, e - err, e + err, color='darkorange', alpha=0.2)

    plt.fill_between(
        v,
        e - err_,
        e + err_,
        color='palegreen',  # palegreen
        alpha=0.2)

    plt.text(0.0, e_max, '%.3f' % e_min, fontdict={'size': 10.5, 'color': 'k'})
    plt.legend(loc='best', edgecolor='yellowgreen')  # lower left upper right
    plt.savefig('Energy.svg', transparent=True)
    plt.close()
Esempio n. 13
0
def e(traj='pre_dft.traj',batch_size=100,nn=True):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    e,ei,ei_    = [],[],[]

    ir = IRFF(atoms=images[0],
                 libfile=ffield,
                 nn=True)
    ir.get_potential_energy(images[0])

    ir_reax = IRFF(atoms=images[0],
                 libfile='ffield',
                 nn=False)
    ir_reax.get_potential_energy(images[0])

    v_,pdft,pml,preax,diff   = [],[],[],[],[]
    v0  = images[0].get_volume()

    for i,atoms in enumerate(images):
        v=atoms.get_volume()
        e.append(atoms.get_potential_energy())
        stress_ = atoms.get_stress()
        if v/v0 < 0.86:
           pdft.append(calculate_pressure(stress_)) 

           ir.calculate(atoms=atoms,CalStress=True)
           ei.append(ir.E)
           stress  = ir.results['stress']
           pml.append(calculate_pressure(stress)) 

           ir_reax.calculate(atoms=atoms,CalStress=True)
           ei_.append(ir.E)
           stress  = ir_reax.results['stress']
           preax.append(calculate_pressure(stress)) 

           v_.append(v/v0)
           diff.append(abs(pml[-1]-pdft[-1]))
           print(' * V/V0',v_[-1],v,pml[-1],pdft[-1],' diff: ',diff[-1])
     
    print(' * mean error:',np.mean(diff))
    e_min = min(e)
    e_max = max(e)
    e = np.array(e) - e_min
    e_min = min(ei)
    ei = np.array(ei) - e_min

    plt.figure()   
    plt.ylabel(r'$Pressure$ ($GPa$)')
    plt.xlabel(r'$V/V_0$')
    # plt.xlim(0,i)
    # plt.ylim(0,np.max(hist)+0.01)

    ax   = plt.gca()
    pml  = np.array(pml)
    pdft = np.array(pdft)

    plt.plot(v_,pml,alpha=0.9,
             linestyle='-',marker='o',markerfacecolor='none',markersize=7,
             color='b',label='IRFF(MPNN)')

    plt.plot(v_,preax,alpha=0.9,
             linestyle='-',marker='^',markerfacecolor='none',markersize=7,
             color='g',label='ReaxFF(trained)')

    plt.plot(v_,pdft,alpha=0.9,
             linestyle='-',marker='s',markerfacecolor='none',markersize=7,
             color='r',label='DFT(SIESTA)')
    
    pdiff = np.abs(pdft - pml)
    plt.fill_between(v_, pdft - pdiff, pdft + pdiff, color='darkorange',
                     alpha=0.2)

    pdiff = np.abs(pdft - preax)
    plt.fill_between(v_, pdft - pdiff, pdft + pdiff, color='palegreen',
                     alpha=0.2)

    plt.legend(loc='best',edgecolor='yellowgreen') # lower left upper right
    plt.savefig('compare-pv.svg',transparent=True) 
    plt.close() 
Esempio n. 14
0
def e(traj='siesta.traj',batch_size=100,nn=False):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    e,ei      = [],[]

    ir = IRFF(atoms=images[0],
          libfile='ffield',
          nn=False,
          bo_layer=[8,4])

    ir.get_potential_energy(images[0])

    for i,atoms in enumerate(images):
        e.append(atoms.get_potential_energy())
        ei.append(ir.get_potential_energy(atoms))

    e_max = max(e)
    e = np.array(e) - e_max

    rn = ReaxFF(libfile=ffield,
                direcs={'tmp':'siesta.traj'},
                dft='siesta',
                opt=[],optword='nocoul',
                batch_size=batch_size,
                atomic=True,
                clip_op=False,
                InitCheck=False,
                nn=nn,
                pkl=False,
                to_train=False) 
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10,method='AdamOptimizer')

    mol  = 'tmp'
    er   = rn.get_value(rn.E[mol])
    dfte = rn.get_value(rn.dft_energy[mol]) 
    zpe  = rn.get_value(rn.zpe[mol])

    er   = er - e_max
    ei   = np.array(ei) - e_max

    plt.figure()   
    plt.ylabel('Energy (eV)')
    plt.xlabel('Step')
    plt.xlim(0,i)
    # plt.ylim(0,np.max(hist)+0.01)

    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    # ax.spines['left'].set_position(('data',0))
    # ax.spines['bottom'].set_position(('data', 0))

    plt.plot(e,alpha=0.01,
             linestyle='-',marker='s',markerfacecolor='none',
             markeredgewidth=1,markeredgecolor='r',markersize=4,
             color='red',label='DFT (SIESTA)')
    plt.plot(er,alpha=0.01,
             linestyle='-',marker='o',markerfacecolor='none',
             markeredgewidth=1,markeredgecolor='b',markersize=4,
             color='blue',label='ReaxFF')
    plt.plot(ei,alpha=0.01,
             linestyle='-',marker='^',markerfacecolor='none',
             markeredgewidth=1,markeredgecolor='g',markersize=4,
             color='blue',label='IRFF')

    plt.text( 0.0, 0.5, '%.3f' %e_max, fontdict={'size':10.5, 'color': 'k'})
    plt.legend(loc='upper left',edgecolor='yellowgreen') # lower left upper right
    plt.savefig('Energy.eps',transparent=True) 
    plt.close() 
Esempio n. 15
0
def geo_opt():
    # parameters
    atoms = read('nm.gen')
    atoms.calc = IRFF(atoms=atoms, nn=True, libfile='ffield.json')
    optimizer = BFGS(atoms, trajectory="opt.traj")
    optimizer.run(0.02, 100)
Esempio n. 16
0
def dh(traj='siesta.traj', batch_size=1, nn=True, frame=7):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]
    his = TrajectoryWriter('tmp.traj', mode='w')
    his.write(atoms=atoms)
    his.close()

    from irff.irff import IRFF
    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn, bo_layer=[9, 2])
    ir.get_potential_energy(atoms)

    from irff.reax import ReaxFF
    rn = ReaxFF(libfile=ffield,
                direcs={'tmp': 'tmp.traj'},
                dft='siesta',
                opt=[],
                optword='nocoul',
                batch_size=batch_size,
                atomic=True,
                clip_op=False,
                InitCheck=False,
                nn=nn,
                pkl=False,
                to_train=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    hblab = rn.lk.hblab
    hbs = []

    for hb in ir.hbs:
        hbs.append(list(hb))

    eh_ = rn.get_value(rn.EHB)
    # eh     = ir.ehb.numpy()
    rhb_ = rn.get_value(rn.rhb)
    # rhb    = ir.rhb.numpy()

    frhb_ = rn.get_value(rn.frhb)
    # frhb   = ir.frhb.numpy()

    sin4_ = rn.get_value(rn.sin4)
    # sin4   = ir.sin4.numpy()

    # exphb1_= rn.get_value(rn.exphb1)
    # exphb2_= rn.get_value(rn.exphb2)

    # exphb1 = ir.exphb1.numpy()
    # exphb2 = ir.exphb2.numpy()

    # hbsum_ = rn.get_value(rn.hbsum)
    # hbsum  = ir.hbsum.numpy()

    for hb in rn.hbs:
        for a_ in range(rn.nhb[hb]):
            a = hblab[hb][a_][1:]
            i, j, k = a

            if a in hbs:
                ai = hbs.index(a)
                # if eh_[hb][a_][0]<-0.000001:
                print(
                    '-  %2d%s-%2d%s-%2d%s:' %
                    (i, ir.atom_name[i], j, ir.atom_name[j], k,
                     ir.atom_name[k]), 'ehb: %10.8f' % (eh_[hb][a_][0]),
                    'rhb: %10.8f' % (rhb_[hb][a_][0]),
                    'frhb: %10.8f' % (frhb_[hb][a_][0]),
                    'sin4: %10.8f' % (sin4_[hb][a_][0]))
Esempio n. 17
0
def db(traj='opt.traj', batch_size=50, ef=3, nn=True, frame=40):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]

    e, ei = [], []
    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn, autograd=False)

    ir.calculate(atoms)

    ei.append(ir.Ebond)
    ebond = ir.ebond  # .numpy()

    rn = MPNN(libfile=ffield,
              direcs={'tmp': traj},
              dft='siesta',
              opt=[],
              optword='nocoul',
              batch_size=batch_size,
              atomic=True,
              clip_op=False,
              InitCheck=False,
              nn=nn,
              bo_layer=[9, 2],
              EnergyFunction=ef,
              pkl=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    er = rn.get_value(rn.ebond[mol])
    blab = rn.lk.bdlab

    bosi = ir.bosi.numpy()
    bopsi = ir.bop_si.numpy()
    boppi = ir.bop_pi.numpy()
    boppp = ir.bop_pp.numpy()

    bopow3 = ir.bopow3.numpy()
    eterm3 = ir.eterm3.numpy()

    bop = ir.bop.numpy()
    bo = ir.bo0.numpy()

    eterm1 = ir.eterm1.numpy()
    bopow1 = ir.bopow1.numpy()
    bodiv1 = ir.bodiv1.numpy()

    r = ir.r.numpy()
    D_ = rn.get_value(rn.Deltap)
    D = ir.Deltap.numpy()

    ebd_ = np.zeros([ir.natom, ir.natom])

    for bd in rn.bonds:
        for nb in range(rn.nbd[bd]):
            ebd = rn.get_value(rn.EBD[bd])
            mol_, i, j = blab[bd][nb]
            bosi_ = rn.get_value(rn.bosi[bd])
            bopsi_ = rn.get_value(rn.bop_si[bd])
            boppi_ = rn.get_value(rn.bop_pi[bd])
            boppp_ = rn.get_value(rn.bop_pp[bd])

            bopow3_ = rn.get_value(rn.bopow3[bd])
            eterm3_ = rn.get_value(rn.eterm3[bd])

            bop_ = rn.get_value(rn.bop[bd])
            bo_ = rn.get_value(rn.bo0[bd])

            eterm1_ = rn.get_value(rn.eterm1[bd])
            bopow1_ = rn.get_value(rn.bopow1[bd])
            bodiv1_ = rn.get_value(rn.bodiv1[bd])

            rbd = rn.get_value(rn.rbd[bd])

            ebd_[i][j] = ebd[nb][frame]
            ebd_[j][i] = ebd[nb][frame]
            # if abs(bo_[nb][0]-bo[i][j])>0.00001:
            print('-  %s %2d %2d:' % (bd, i, j),
                  'rbd %10.7f %10.7f' % (rbd[nb][frame], r[i][j]),
                  'bop %10.7f %10.7f' % (bop_[nb][frame], bop[i][j]),
                  'Di %10.7f %10.7f' % (D_[i][frame], D[i]),
                  'Dj %10.7f %10.7f' % (D_[j][frame], D[j]),
                  'bo %10.7f %10.7f' % (bo_[nb][frame], bo[i][j]),
                  'ebond %10.7f %10.7f' % (ebd[nb][frame], ebond[i][j]))

    rcbo = rn.get_value(rn.rc_bo)
    eb = rn.get_value(rn.ebond[mol])
    print('\n-  bond energy:', ir.Ebond.numpy(), eb[frame], end='\n')

    for i in range(ir.natom):
        for j in range(ir.natom):
            if abs(ebd_[i][j] - ebond[i][j]) > 0.00001:
                print('-  %s %2d %2d:' % (bd, i, j), 'rbd %10.7f' % (r[i][j]),
                      'bop %10.7f' % (bop[i][j]),
                      'Di %10.7f %10.7f' % (D_[i][frame], D[i]),
                      'Dj %10.7f %10.7f' % (D_[j][frame], D[j]),
                      'bo %10.7f' % (bo[i][j]),
                      'ebond %10.7f %10.7f' % (ebd_[i][j], ebond[i][j]))

    # print(rcbo)
    print('\n-  bond energy:', ir.Ebond.numpy(), eb[frame], end='\n')
Esempio n. 18
0
from ase.optimize import BFGS, FIRE
from irff.md import opt
from irff.irff import IRFF
from ase.io.trajectory import TrajectoryWriter
import matplotlib.pyplot as plt

traj = TrajectoryWriter('pre_opt.traj', mode='w')

atoms = read('sc.gen')
cell = atoms.get_cell()
atoms_ = atoms.copy()
configs = []
GPa = 1.60217662 * 1.0e2
s = 1.0
i = 0
ir = IRFF(atoms=atoms_, libfile='ffield.json', nn=True)

v_, p = [], []
v0 = atoms.get_volume()

while s > 0.59:
    print(' * lattice step:', i)
    f = s**(1.0 / 3.0)
    cell_ = cell.copy()
    cell_ = cell * f
    atoms_.set_cell(cell_)
    atoms_ = opt(atoms=atoms_, fmax=0.02, step=120, optimizer=FIRE)
    configs.append(atoms_)
    traj.write(atoms=atoms_)
    ir.calculate(atoms=atoms_, CalStress=True)
    stress = ir.results['stress']
Esempio n. 19
0
def da(traj='opt.traj', batch_size=50, ef=3, nn=True, frame=44):
    ffield = 'ffield.json' if nn else 'ffield'
    images = Trajectory(traj)
    atoms = images[frame]
    his = TrajectoryWriter('tmp.traj', mode='w')
    his.write(atoms=atoms)
    # his.write(atoms=images[frame+1])
    his.close()

    ir = IRFF(atoms=atoms, libfile=ffield, nn=nn, autograd=False)
    ir.calculate(atoms)

    rn = MPNN(libfile=ffield,
              direcs={'tmp': 'tmp.traj'},
              dft='siesta',
              opt=[],
              optword='nocoul',
              batch_size=batch_size,
              atomic=True,
              clip_op=False,
              InitCheck=False,
              nn=nn,
              bo_layer=[9, 2],
              EnergyFunction=ef,
              pkl=False)
    molecules = rn.initialize()
    rn.session(learning_rate=1.0e-10, method='AdamOptimizer')

    mol = 'tmp'
    anglab = rn.lk.anglab
    angs = []
    for ang in ir.angs:
        angs.append(list(ang))

    ea_ = rn.get_value(rn.EANG)
    ea = ir.eang.numpy()
    f7_ = rn.get_value(rn.f_7)
    f7 = ir.f_7.numpy()
    f8_ = rn.get_value(rn.f_8)
    f8 = ir.f_8.numpy()
    expang_ = rn.get_value(rn.expang)
    expang = ir.expang.numpy()

    theta_ = rn.get_value(rn.theta)
    theta = ir.theta.numpy()
    theta0_ = rn.get_value(rn.theta0)
    theta0 = ir.thet0.numpy()

    sbo3_ = rn.get_value(rn.SBO3)
    sbo3 = ir.SBO3.numpy()

    fa = open('ang.txt', 'w')
    for ang in rn.angs:
        for a_ in range(rn.nang[ang]):
            a = anglab[ang][a_][1:]

            if a not in angs:
                a.reverse()
            i, j, k = a
            if a in angs:
                ai = angs.index(a)
                print(
                    ' * %2d%s-%2d%s-%2d%s:' %
                    (i, ir.atom_name[i], j, ir.atom_name[j], k,
                     ir.atom_name[k]),
                    #'eang: %10.8f  %10.8f' %(ea_[ang][a_][0],ea[ai]),
                    'f7: %10.8f  %10.8f' % (f7_[ang][a_][0], f7[ai]),
                    'f8: %10.8f  %10.8f' % (f8_[ang][a_][0], f8[ai]),
                    'expang: %10.8f  %10.8f' %
                    (expang_[ang][a_][0], expang[ai]),
                    'theta: %10.8f  %10.8f' % (theta_[ang][a_][0], theta[ai]),
                    # 'sbo3: %10.8f  %10.8f' %(sbo3_[ang][a_][0],sbo3[ai]),
                    'theta0: %10.8f  %10.8f' %
                    (theta0_[ang][a_][0], theta0[ai]),
                    file=fa)
            else:
                print(
                    ' * %2d%s-%2d%s-%2d%s:' %
                    (i, ir.atom_name[i], j, ir.atom_name[j], k,
                     ir.atom_name[k]),
                    #'eang: %10.8f' %(ea_[ang][a_][0]),
                    'f7: %10.8f' % (f7_[ang][a_][0]),
                    'f8: %10.8f' % (f8_[ang][a_][0]),
                    'expang: %10.8f' % (expang_[ang][a_][0]),
                    'expang: %10.8f' % (expang_[ang][a_][0]),
                    'theta: %10.8f' % (theta_[ang][a_][0]),
                    # 'sbo3: %10.8f' %(sbo3_[ang][a_][0]),
                    'theta0: %10.8f' % (theta0_[ang][a_][0]))
    fa.close()
    epen = rn.get_value(rn.epen)
    eang = rn.get_value(rn.eang)
    print(' * penalty energy:', ir.Epen.numpy(), epen[mol][0])
    print(' * angel energy:', ir.Eang.numpy(), eang[mol][0])
Esempio n. 20
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# from irff.plot.reax_plot import plbo
# from irff.plot import reax_pldd,reax_plbd
from irff.irff import IRFF
from irff.reax_eager import ReaxFF
from ase.io import read, write
import numpy as np

# direcs={'tatb2':'/home/feng/siesta/tatb2_4'}

atoms = read('siesta.traj', index=29)

ir = IRFF(atoms=atoms, libfile='ffield.json', rcut=None, nn=True)

ir.get_pot_energy(atoms)

# print('\n-  ebond:\n',ir.Ebond.numpy())
# # print('\n-  ebond:\n',ir.Delta.numpy())
# print('\n-  elone:\n',ir.Elone.numpy())
# print('\n-  eover:\n',ir.Eover.numpy())
# print('\n-  eunder:\n',ir.Eunder.numpy())
# print('\n-  etor:\n',ir.Etor.numpy())
# print('\n-  efcon:\n',ir.Efcon.numpy())
# print('\n-  ehb:\n',ir.Ehb.numpy())
grad = ir.tape.gradient(ir.E, ir.positions)
print('\n-  gradient:\n', grad.numpy())

# rn = ReaxFF(libfile='ffield.json',
#             direcs={'tmp':'siesta.traj'},
#             dft='siesta',
Esempio n. 21
0
def static_compress():
    traj = TrajectoryWriter('pre_opt.traj', mode='w')
    atoms = read('nm.gen')
    cell = atoms.get_cell()
    atoms_ = atoms.copy()
    configs = []

    GPa = 1.60217662 * 1.0e2
    s = 1.0
    i = 0
    ir = IRFF(atoms=atoms_, libfile='ffield.json', nn=True)

    v_, p = [], []
    v0 = atoms.get_volume()

    while s > 0.66:
        print(' * lattice step:', i)
        f = s**(1.0 / 3.0)
        cell_ = cell.copy()
        cell_ = cell * f
        ir.CalStress = False
        atoms_.set_cell(cell_)
        atoms_ = opt(atoms=atoms_, fmax=0.02, step=120, optimizer=FIRE)
        configs.append(atoms_)
        traj.write(atoms=atoms_)
        ir.CalStress = True
        ir.calculate(atoms=atoms_)
        stress = ir.results['stress']

        nonzero = 0
        stre_ = 0.0
        for _ in range(3):
            if abs(stress[_]) > 0.0000001:
                nonzero += 1
                stre_ += -stress[_]
        pressure = stre_ * GPa / nonzero

        p.append(pressure)
        v = atoms_.get_volume()
        v_.append(v / v0)
        print(' * V/V0', v_[-1], v, pressure)

        s = s * 0.98
        i += 1

    fig, ax = plt.subplots()
    plt.ylabel(r'$Pressure$ ($GPa$)')
    plt.xlabel(r'$V/V_0$')
    plt.plot(v_,
             p,
             label=r'$IRFF-MPNN$',
             color='blue',
             marker='o',
             markerfacecolor='none',
             markeredgewidth=1,
             ms=5,
             alpha=0.8,
             linewidth=1,
             linestyle='-')

    plt.legend(loc='best', edgecolor='yellowgreen')
    plt.savefig('pv.pdf')
    plt.close()