# Converted from Vau.m - London-Eyring-Polanyi-Sato (LEPS) potentialimportnumpyasnpdefVau(r1,r2,p):r3=r1+r2r=[r1,r2,r3]E1=np.zeros(3)E3=np.zeros(3)Q=np.zeros(3)J=np.zeros(3)forxinrange(3):E1[x]=p['D1'][x]*(np.exp(-2*p['B1'][x]*(r[x]-p['r10'][x]))-2*np.exp(-p['B1'][x]*(r[x]-p['r10'][x])))E3a=p['D3'][x]*(np.exp(-2*p['B3'][x]*(r[x]-p['r30'][x]))+2*np.exp(-p['B3'][x]*(r[x]-p['r30'][x])))E3b=p['C'][x]*(r[x]+p['A'][x])*np.exp(-p['Si'][x]*r[x])E3[x]=E3aifr[x]<=p['R_1'][x]elseE3bQ[x]=(E1[x]+E3[x])/2J[x]=(E1[x]-E3[x])/2retval=(Q[0]+Q[1]+Q[2]-np.sqrt(0.5*((J[0]-J[1])**2+(J[1]-J[2])**2+(J[0]-J[2])**2)))returnretvalif__name__=='__main__':# Simple test - no file output for helper modulepass
rder.py
1 2 3 4 5 6 7 8 91011
# Converted from rder.m - derivative dr2/dr1 along reaction path# [depends] lder.pyimportosfromlderimportlderdefrder(r1,r2,p):return1.0/lder(r2,r1,p)if__name__=='__main__':pass
# Converted from lder.m - derivative dr1/dr2 along reaction path (London-Eyring-Polanyi-Sato)importnumpyasnpdeflder(r2,r1,p):r3=r1+r2r=[r1,r2,r3]E1=np.zeros(3)E3=np.zeros(3)Q=np.zeros(3)J=np.zeros(3)dE1=np.zeros((3,3))dE3=np.zeros((3,3))forxinrange(3):E1[x]=p['D1'][x]*(np.exp(-2*p['B1'][x]*(r[x]-p['r10'][x]))-2*np.exp(-p['B1'][x]*(r[x]-p['r10'][x])))E3a=p['D3'][x]*(np.exp(-2*p['B3'][x]*(r[x]-p['r30'][x]))+2*np.exp(-p['B3'][x]*(r[x]-p['r30'][x])))E3b=p['C'][x]*(r[x]+p['A'][x])*np.exp(-p['Si'][x]*r[x])E3[x]=E3aifr[x]<=p['R_1'][x]elseE3bQ[x]=(E1[x]+E3[x])/2J[x]=(E1[x]-E3[x])/2# diagonal derivatives dE1[i,i] and dE3[i,i]foriinrange(3):dE1[i,i]=-2*p['B1'][i]*p['D1'][i]*(np.exp(-2*p['B1'][i]*(r[i]-p['r10'][i]))-np.exp(-p['B1'][i]*(r[i]-p['r10'][i])))ifr[i]<=p['R_1'][i]:dE3[i,i]=-2*p['B3'][i]*p['D3'][i]*(np.exp(-2*p['B3'][i]*(r[i]-p['r30'][i]))+np.exp(-p['B3'][i]*(r[i]-p['r30'][i])))else:dE3[i,i]=p['C'][i]*np.exp(-p['Si'][i]*r[i])*(1-p['Si'][i]*(r[i]+p['A'][i]))dE1[0,1]=0.;dE3[0,1]=0.dE1[1,0]=0.;dE3[1,0]=0.dE1[2,0]=dE1[2,2];dE3[2,0]=dE3[2,2]dE1[2,1]=dE1[2,2];dE3[2,1]=dE3[2,2]dE1[0,2]=1000.;dE3[0,2]=1000.dE1[1,2]=1000.;dE3[1,2]=1000.dE1[2,2]=1000.;dE3[2,2]=1000.dQ=(dE1+dE3)/2dJ=(dE1-dE3)/2sq=np.sqrt(0.5*((J[0]-J[1])**2+(J[1]-J[2])**2+(J[0]-J[2])**2))dV1=(dQ[0,0]+dQ[2,0]-0.5/sq*(J[0]*(2*dJ[0,0]-dJ[2,0])+J[1]*(-dJ[0,0]-dJ[2,0])+J[2]*(2*dJ[2,0]-dJ[0,0])))dV2=(dQ[1,1]+dQ[2,1]-0.5/sq*(J[0]*(-dJ[1,1]-dJ[2,1])+J[1]*(2*dJ[1,1]-dJ[2,1])+J[2]*(2*dJ[2,1]-dJ[1,1])))returndV1/dV2if__name__=='__main__':pass
main.py
1 2 3 4 5 6 7 8 910111213141516
# Converted from hfp.m - compute reaction path and save [s, V]# [depends] initdata.py inittrace.pyimportnumpyasnpimportosfrominitdataimportinitdatafrominittraceimportinittracefrommiscimportsave_asciip=initdata()en1=3.0en2=5.0s,V,d3trace,num=inittrace(en1,en2,p)hfptable=np.column_stack([s,V])save_ascii('hfp.dat',hfptable)