def run_simulation(self, label, liq, AGrad=True): """ Submit a simulation to the Work Queue or run it locally. Inputs: label = The name of the molecule (and hopefully the folder name that you're running in) liq = True/false flag indicating whether to run in liquid or gas phase """ wq = getWorkQueue() # Create a dictionary of MD options that the script will read. md_opts = OrderedDict() md_opts['temperature'] = self.hfe_temperature md_opts['pressure'] = self.hfe_pressure md_opts['minimize'] = True if liq: sdnm = 'liq' md_opts['nequil'] = self.liquid_eq_steps md_opts['nsteps'] = self.liquid_md_steps md_opts['timestep'] = self.liquid_timestep md_opts['sample'] = self.liquid_interval else: sdnm = 'gas' md_opts['nequil'] = self.gas_eq_steps md_opts['nsteps'] = self.gas_md_steps md_opts['timestep'] = self.gas_timestep md_opts['sample'] = self.gas_interval eng_opts = deepcopy(self.engine_opts) # Enforce implicit solvent in the liquid simulation. # We need to be more careful with this when running explicit solvent. eng_opts['implicit_solvent'] = liq eng_opts['coords'] = os.path.basename(self.molecules[label]) if not os.path.exists(sdnm): os.makedirs(sdnm) os.chdir(sdnm) if not os.path.exists('md_result.p'): # Link in a bunch of files... what were these again? link_dir_contents(os.path.join(self.root,self.rundir),os.getcwd()) # Link in the scripts required to run the simulation for f in self.scripts: LinkFile(os.path.join(os.path.split(__file__)[0],"data",f),os.path.join(os.getcwd(),f)) # Link in the coordinate file. LinkFile(self.molecules[label], './%s' % os.path.basename(self.molecules[label])) # Store names of previous trajectory files. self.last_traj += [os.path.join(os.getcwd(), i) for i in self.extra_output] # Write target, engine and simulation options to disk. lp_dump((self.OptionDict, eng_opts, md_opts), 'simulation.p') # Execute the script for running molecular dynamics. cmdstr = '%s python md_ism_hfe.py %s' % (self.prefix, "-g" if AGrad else "") if wq == None: logger.info("Running condensed phase simulation locally.\n") logger.info("You may tail -f %s/npt.out in another terminal window\n" % os.getcwd()) _exec(cmdstr, copy_stderr=True, outfnm='md.out') else: queue_up(wq, command = cmdstr+' &> md.out', tag='%s:%s/%s' % (self.name, label, "liq" if liq else "gas"), input_files = self.scripts + ['simulation.p', 'forcefield.p', os.path.basename(self.molecules[label])], output_files = ['md_result.p', 'md.out'] + self.extra_output, tgt=self, verbose=False, print_time=3600) os.chdir('..')
def run_simulation(self, label, liq, AGrad=True): """ Submit a simulation to the Work Queue or run it locally. Inputs: label = The name of the molecule (and hopefully the folder name that you're running in) liq = True/false flag indicating whether to run in liquid or gas phase """ wq = getWorkQueue() # Create a dictionary of MD options that the script will read. md_opts = OrderedDict() md_opts['temperature'] = self.hfe_temperature md_opts['pressure'] = self.hfe_pressure md_opts['minimize'] = True if liq: sdnm = 'liq' md_opts['nequil'] = self.liquid_eq_steps md_opts['nsteps'] = self.liquid_md_steps md_opts['timestep'] = self.liquid_timestep md_opts['sample'] = self.liquid_interval else: sdnm = 'gas' md_opts['nequil'] = self.gas_eq_steps md_opts['nsteps'] = self.gas_md_steps md_opts['timestep'] = self.gas_timestep md_opts['sample'] = self.gas_interval eng_opts = deepcopy(self.engine_opts) # Enforce implicit solvent in the liquid simulation. # We need to be more careful with this when running explicit solvent. eng_opts['implicit_solvent'] = liq eng_opts['coords'] = os.path.basename(self.molecules[label]) if not os.path.exists(sdnm): os.makedirs(sdnm) os.chdir(sdnm) if not os.path.exists('md_result.p'): # Link in a bunch of files... what were these again? link_dir_contents(os.path.join(self.root,self.rundir),os.getcwd()) # Link in the scripts required to run the simulation for f in self.scripts: LinkFile(os.path.join(os.path.split(__file__)[0],"data",f),os.path.join(os.getcwd(),f)) # Link in the coordinate file. LinkFile(self.molecules[label], './%s' % os.path.basename(self.molecules[label])) # Store names of previous trajectory files. self.last_traj += [os.path.join(os.getcwd(), i) for i in self.extra_output] # Write target, engine and simulation options to disk. lp_dump((self.OptionDict, eng_opts, md_opts), 'simulation.p') # Execute the script for running molecular dynamics. cmdstr = '%s python md_ism_hfe.py %s' % (self.prefix, "-g" if AGrad else "") if wq is None: logger.info("Running condensed phase simulation locally.\n") logger.info("You may tail -f %s/npt.out in another terminal window\n" % os.getcwd()) _exec(cmdstr, copy_stderr=True, outfnm='md.out') else: queue_up(wq, command = cmdstr+' &> md.out', tag='%s:%s/%s' % (self.name, label, "liq" if liq else "gas"), input_files = self.scripts + ['simulation.p', 'forcefield.p', os.path.basename(self.molecules[label])], output_files = ['md_result.p', 'md.out'] + self.extra_output, tgt=self, verbose=False, print_time=3600) os.chdir('..')