You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
60 lines
1.9 KiB
2 years ago
|
# CMMDE function for xTB standalone program
|
||
|
import os
|
||
|
def xtb(job,geom,nproc,product,temperature,nrun,npoint,anopt,kpush,kpull,ppull,alp,distance,angle,dihedral,scanmode,maxiter,scan):
|
||
|
with open('run.sh','w') as fout:
|
||
|
print("""#!/bin/bash
|
||
|
#SBATCH --nodes=1
|
||
|
#SBATCH --ntasks=1
|
||
|
#SBATCH --cpus-per-task=1
|
||
|
#SBATCH --time=168:0:0
|
||
|
export OMP_NUM_THREADS={}
|
||
|
cd $PWD""".format(nproc),file=fout)
|
||
|
if 'opt' in job:
|
||
|
print("$XTB_COMMAND {} --opt -P {} > xtb.out".format(geom,nproc),file=fout)
|
||
|
if 'freq' in job:
|
||
|
print("$XTB_COMMAND {} --hess -P {} --input cmmd.in > xtb.out".format(geom,nproc), file=fout)
|
||
|
if 'opt' in job and 'freq' in job:
|
||
|
print("$XTB_COMMAND {} --ohess -P {} --input cmmd.in > xtb.out".format(geom,nproc),file=fout)
|
||
|
if 'path' in job:
|
||
|
print("$XTB_COMMAND {} --path {} --input cmmd.in -P {} > xtb.out".format(geom,product,nproc),file=fout)
|
||
|
if 'scan' in job:
|
||
|
print("$XTB_COMMAND {} --opt -P {} --input cmmd.in > xtb.out".format(geom,nproc), file=fout)
|
||
|
if 'freq' in job:
|
||
|
with open('cmmd.in', 'w') as f:
|
||
|
print("""$thermo
|
||
|
temp={}""".format(temperature),file=f)
|
||
|
|
||
|
if 'path' in job:
|
||
|
with open("cmmd.in", 'w') as f:
|
||
|
print("""$path
|
||
|
nrun={}
|
||
|
npoint={}
|
||
|
anopt={}
|
||
|
kpush={}
|
||
|
kpull={}
|
||
|
ppull={}
|
||
|
alp={}
|
||
|
$end""".format(nrun,npoint,anopt,kpush,kpull,ppull,alp),file=f)
|
||
|
|
||
|
if 'scan' in job:
|
||
|
with open("cmmd.in",'w') as f:
|
||
|
print("$constrain",file=f)
|
||
|
if distance != 'None':
|
||
|
print("distance: {}".format(distance),file=f)
|
||
|
if angle != 'None':
|
||
|
print("angle: {}".format(angle),file=f)
|
||
|
if dihedral != 'None':
|
||
|
print("dihedral: {}".format(dihedral),file=f)
|
||
|
print("$scan",file=f)
|
||
|
if scanmode != 'None':
|
||
|
print("mode = {}".format(scanmode),file=f)
|
||
|
scan = scan.split(";")
|
||
|
for index, i in enumerate(scan):
|
||
|
print("{}: {}".format(index+1,i),file=f)
|
||
|
print("""$opt
|
||
|
maxcycle = {}""".format(maxiter),file=f)
|
||
|
|
||
|
|
||
|
os.system('sbatch run.sh')
|
||
|
|