# 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,solvent): 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: if solvent != 'none': print("$XTB_COMMAND {} --opt -P {} --alpb {} > xtb.out".format(geom,nproc,solvent),file=fout) else: print("$XTB_COMMAND {} --opt -P {} > xtb.out".format(geom,nproc),file=fout) if 'freq' in job: if solvent != 'none': print("$XTB_COMMAND {} --hess -P {} --input cmmd.in --alpb {} > xtb.out".format(geom,nproc,solvent), file=fout) else: print("$XTB_COMMAND {} --hess -P {} --input cmmd.in > xtb.out".format(geom,nproc), file=fout) if 'opt' in job and 'freq' in job: if solvent != 'none': print("$XTB_COMMAND {} --ohess -P {} --input cmmd.in --alpb {} > xtb.out".format(geom,nproc,solvent),file=fout) else: print("$XTB_COMMAND {} --ohess -P {} --input cmmd.in > xtb.out".format(geom,nproc),file=fout) if 'path' in job: if solvent != 'none': print("$XTB_COMMAND {} --path {} --input cmmd.in -P {} --alpb {} > xtb.out".format(geom,product,nproc,solvent),file=fout) else: print("$XTB_COMMAND {} --path {} --input cmmd.in -P {} > xtb.out".format(geom,product,nproc),file=fout) if 'scan' in job: if solvent != 'none': print("$XTB_COMMAND {} --opt -P {} --input cmmd.in --alpb {} > xtb.out".format(geom,nproc,solvent), file=fout) else: 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')