Example #1
0
    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)
Example #2
0
            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()