def evaluator(self, username, basedir, queue, walltime, ppn, features=None): while True: # 1. Get actives no evaluated ane = self.actives_no_evaluated if len(ane) > 0: print("Candidates to be evaluated: %d" % len(ane)) else: print("No candidates to be evaluated") # 2. Get jobs in queue jobs = get_jobs(username) jobnames = [jobs[x]['Job_Name'] for x in jobs] check = False for entry_id in ane: if str(entry_id) not in jobnames: check = True else: jobids = [ jobs[x]['Job_Id'] for x in jobs if jobs[x]['Job_Name'] == str(entry_id) ] for jobid in jobids: check = True if jobs[jobid]['job_state'] != 'C': check = False break to_submit = False if check: to_submit = True if not os.path.isdir(basedir + os.sep + str(entry_id)): self.prepare_folder(entry_id, workdir=basedir, source_dir=basedir) elif os.path.isfile(basedir + os.sep + str(entry_id) + os.sep + 'COMPLETE'): abinitout = self.get_final_abinit_out(basedir + os.sep + str(entry_id)) if abinitout is not None: abo = AbinitOutput(abinitout) # check if finished if abo.is_finished: # Collect results self.collect(entry_id, basedir) to_submit = False if to_submit: self.submit(entry_id, basedir, queue, walltime, ppn, features) print('Sleeping for 10 minutes') time.sleep(600)
db_settings['name'] = args.dbname[idb] pcdb = pychemia.db.get_database(db_settings) popu = pychemia.population.NonCollinearMagMoms( pcdb, source_dir=args.source_dir[idb]) print('Number of candidates evaluated: %d' % len(popu.actives_evaluated)) print('Number of candidates not evaluated: %d' % len(popu.actives_no_evaluated)) to_compute = popu.actives_no_evaluated print('Candidates to compute:') for ijob in to_compute: print(ijob) jobs = get_jobs(args.pbs_user) jobnames = [jobs[x]['Job_Name'] for x in jobs] source_dir = args.source_dir[idb] for ijob in to_compute: if str(ijob) not in jobnames: data_collected = popu.collect_data(ijob, workdir=source_dir + os.sep + str(ijob)) if not data_collected: print('Preparing and submitting job: %s' % str(ijob)) popu.prepare_folder(ijob, workdir=source_dir + os.sep + str(ijob)) pbs = pychemia.runner.PBSRunner(source_dir + os.sep +
for idb in range(len(args.dbname)): print('DATABASE: %s' % args.dbname[idb]) db_settings['name'] = args.dbname[idb] pcdb = pychemia.db.get_database(db_settings) popu = pychemia.population.NonCollinearMagMoms(pcdb, source_dir=args.source_dir[idb]) print('Number of candidates evaluated: %d' % len(popu.actives_evaluated)) print('Number of candidates not evaluated: %d' % len(popu.actives_no_evaluated)) to_compute = popu.actives_no_evaluated print('Candidates to compute:') for ijob in to_compute: print(ijob) current_jobs = get_jobs(args.pbs_user) source_dir = args.source_dir[idb] for ijob in to_compute: if str(ijob) not in current_jobs: data_collected = popu.collect_data(ijob, workdir=source_dir + os.sep + str(ijob)) if not data_collected: print('Preparing and submitting job: %s' % str(ijob)) popu.prepare_folder(ijob, workdir=source_dir + os.sep + str(ijob)) pbs = pychemia.runner.PBSRunner(source_dir + os.sep + str(ijob)) pbs.initialize(ppn=args.pbs_ppn, walltime=[args.pbs_nhours, 0, 0], mail=args.pbs_mail, queue=args.pbs_queue) pbs.set_template(source_dir+os.sep+'template.pbs') pbs.write_pbs() pbs.submit()