def submit_new_workflow(self): # finds a submitted job, creates a workflow, and submits it to FireWorks job = self.jobs.find_and_modify({'state': 'SUBMITTED'}, {'$set': { 'state': 'WAITING' }}) if job: submission_id = job['submission_id'] try: if 'snl_id' in job: snl = MPStructureNL.from_dict(job) else: snl = StructureNL.from_dict(job) if len(snl.structure.sites) > SubmissionProcessor.MAX_SITES: self.sma.update_state(submission_id, 'REJECTED', 'too many sites', {}) print 'REJECTED WORKFLOW FOR {} - too many sites ({})'.format( snl.structure.formula, len(snl.structure.sites)) elif not job['is_valid']: self.sma.update_state( submission_id, 'REJECTED', 'invalid structure (atoms too close)', {}) print 'REJECTED WORKFLOW FOR {} - invalid structure'.format( snl.structure.formula) elif len(set(NO_POTCARS) & set(job['elements'])) > 0: self.sma.update_state(submission_id, 'REJECTED', 'invalid structure (no POTCAR)', {}) print 'REJECTED WORKFLOW FOR {} - invalid element (No POTCAR)'.format( snl.structure.formula) elif not job['is_ordered']: self.sma.update_state(submission_id, 'REJECTED', 'invalid structure (disordered)', {}) print 'REJECTED WORKFLOW FOR {} - invalid structure'.format( snl.structure.formula) else: snl.data['_materialsproject'] = snl.data.get( '_materialsproject', {}) snl.data['_materialsproject'][ 'submission_id'] = submission_id # create a workflow if "Elasticity" in snl.projects: wf = snl_to_wf_elastic(snl, job['parameters']) else: wf = snl_to_wf(snl, job['parameters']) self.launchpad.add_wf(wf) print 'ADDED WORKFLOW FOR {}'.format(snl.structure.formula) except: self.jobs.find_and_modify({'submission_id': submission_id}, {'$set': { 'state': 'ERROR' }}) traceback.print_exc() return submission_id
def submit_new_workflow(self): # finds a submitted job, creates a workflow, and submits it to FireWorks job = self.jobs.find_and_modify({'state': 'SUBMITTED'}, {'$set': {'state': 'WAITING'}}) if job: submission_id = job['submission_id'] try: if 'snl_id' in job: snl = MPStructureNL.from_dict(job) else: snl = StructureNL.from_dict(job) if len(snl.structure.sites) > SubmissionProcessor.MAX_SITES: self.sma.update_state(submission_id, 'REJECTED', 'too many sites', {}) print 'REJECTED WORKFLOW FOR {} - too many sites ({})'.format( snl.structure.formula, len(snl.structure.sites)) elif not job['is_valid']: self.sma.update_state(submission_id, 'REJECTED', 'invalid structure (atoms too close)', {}) print 'REJECTED WORKFLOW FOR {} - invalid structure'.format( snl.structure.formula) elif len(set(NO_POTCARS) & set(job['elements'])) > 0: self.sma.update_state(submission_id, 'REJECTED', 'invalid structure (no POTCAR)', {}) print 'REJECTED WORKFLOW FOR {} - invalid element (No POTCAR)'.format( snl.structure.formula) elif not job['is_ordered']: self.sma.update_state(submission_id, 'REJECTED', 'invalid structure (disordered)', {}) print 'REJECTED WORKFLOW FOR {} - invalid structure'.format( snl.structure.formula) else: snl.data['_materialsproject'] = snl.data.get('_materialsproject', {}) snl.data['_materialsproject']['submission_id'] = submission_id # create a workflow if "Elasticity" in snl.projects: from mpworks.workflows.snl_to_wf_phonon import snl_to_wf_phonon wf=snl_to_wf_phonon(snl, job['parameters']) else: wf = snl_to_wf(snl, job['parameters']) self.launchpad.add_wf(wf) print 'ADDED WORKFLOW FOR {}'.format(snl.structure.formula) except: self.jobs.find_and_modify({'submission_id': submission_id}, {'$set': {'state': 'ERROR'}}) traceback.print_exc() return submission_id
def submit_new_workflow(self): # finds a submitted job, creates a workflow, and submits it to FireWorks job = self.jobs.find_and_modify({'state': 'submitted'}, {'$set': {'state': 'waiting'}}) if job: submission_id = job['submission_id'] try: snl = StructureNL.from_dict(job) snl.data['_materialsproject'] = snl.data.get('_materialsproject', {}) snl.data['_materialsproject']['submission_id'] = submission_id # create a workflow wf = snl_to_wf(snl) self.launchpad.add_wf(wf) print 'ADDED WORKFLOW FOR {}'.format(snl.structure.formula) except: self.jobs.find_and_modify({'submission_id': submission_id}, {'$set': {'state': 'error'}}) traceback.print_exc() return submission_id