def setup(self): """ Method is identical to custodian.vasp.jobs.setup(), except that the environment variable PBS_NUM_PPN is checked first when auto_npar = True. """ files = os.listdir(".") num_structures = 0 if not set(files).issuperset(VASP_INPUT_FILES): for f in files: try: struct = read_structure(f) num_structures += 1 except: pass if num_structures != 1: raise RuntimeError("{} structures found. Unable to continue." .format(num_structures)) else: self.default_vis.write_input(struct, ".") if self.backup: for f in VASP_INPUT_FILES: shutil.copy(f, "{}.orig".format(f)) if self.auto_npar: try: incar = Incar.from_file("INCAR") # Only optimized NPAR for non-HF and non-RPA calculations. if not (incar.get("LHFCALC") or incar.get("LRPA") or incar.get("LEPSILON")): if incar.get("IBRION") in [5, 6, 7, 8]: # NPAR should not be set for Hessian matrix # calculations, whether in DFPT or otherwise. del incar["NPAR"] else: import multiprocessing # try pbs environment variable first # try sge environment variable second # Note! # multiprocessing.cpu_count() will include hyperthreads # in the CPU count, which will set NPAR to be too large # and can cause the job to hang if you use compute # nodes with scratch partitions. ncores = (os.environ.get("PBS_NUM_PPN") or os.environ.get('NSLOTS') or multiprocessing.cpu_count()) ncores = int(ncores) for npar in range(int(math.sqrt(ncores)), ncores): if ncores % npar == 0: incar["NPAR"] = npar break incar.write_file("INCAR") except: pass if self.settings_override is not None: VaspModder().apply_actions(self.settings_override)
def setup(self): """ Method is identical to custodian.vasp.jobs.setup(), except that the environment variable PBS_NUM_PPN is checked first when auto_npar = True. """ files = os.listdir(".") num_structures = 0 if not set(files).issuperset(VASP_INPUT_FILES): for f in files: try: struct = read_structure(f) num_structures += 1 except: pass if num_structures != 1: raise RuntimeError( "{} structures found. Unable to continue.".format( num_structures)) else: self.default_vis.write_input(struct, ".") if self.backup: for f in VASP_INPUT_FILES: shutil.copy(f, "{}.orig".format(f)) if self.auto_npar: try: incar = Incar.from_file("INCAR") # Only optimized NPAR for non-HF and non-RPA calculations. if not (incar.get("LHFCALC") or incar.get("LRPA") or incar.get("LEPSILON")): if incar.get("IBRION") in [5, 6, 7, 8]: # NPAR should not be set for Hessian matrix # calculations, whether in DFPT or otherwise. del incar["NPAR"] else: import multiprocessing # try pbs environment variable first # try sge environment variable second # Note! # multiprocessing.cpu_count() will include hyperthreads # in the CPU count, which will set NPAR to be too large # and can cause the job to hang if you use compute # nodes with scratch partitions. ncores = (os.environ.get("PBS_NUM_PPN") or os.environ.get('NSLOTS') or multiprocessing.cpu_count()) ncores = int(ncores) for npar in range(int(math.sqrt(ncores)), ncores): if ncores % npar == 0: incar["NPAR"] = npar break incar.write_file("INCAR") except: pass if self.settings_override is not None: VaspModder().apply_actions(self.settings_override)
def test_read_structure(self): test_dir = os.path.join(os.path.dirname(__file__), "..", "..", "..", 'test_files') for fname in ("Li2O.cif", "vasprun.xml", "vasprun_Si_bands.xml", "Si.cssr"): filename = os.path.join(test_dir, fname) struct = read_structure(filename) self.assertIsInstance(struct, Structure) prim = read_structure(filename, primitive=True) self.assertLessEqual(len(prim), len(struct)) sorted_s = read_structure(filename, sort=True) self.assertEqual(sorted_s, sorted_s.get_sorted_structure()) m = StructureMatcher() for ext in [".cif", ".json", ".cssr"]: fn = "smartio_structure_test" + ext write_structure(struct, fn) back = read_structure(fn) self.assertTrue(m.fit(back, struct)) os.remove(fn)
def setup(self): """ Performs initial setup for VaspJob, including overriding any settings and backing up. """ files = os.listdir(".") num_structures = 0 if not set(files).issuperset(VASP_INPUT_FILES): for f in files: try: struct = read_structure(f) num_structures += 1 except: pass if num_structures != 1: raise RuntimeError( "{} structures found. Unable to continue.".format( num_structures)) else: self.default_vis.write_input(struct, ".") if self.backup: for f in VASP_INPUT_FILES: shutil.copy(f, "{}.orig".format(f)) if self.auto_npar: try: incar = Incar.from_file("INCAR") #Only optimized NPAR for non-HF and non-RPA calculations. if not (incar.get("LHFCALC") or incar.get("LRPA") or incar.get("LEPSILON")): if incar.get("IBRION") in [5, 6, 7, 8]: # NPAR should not be set for Hessian matrix # calculations, whether in DFPT or otherwise. del incar["NPAR"] else: import multiprocessing # try sge environment variable first # (since multiprocessing counts cores on the current machine only) ncores = os.environ.get( 'NSLOTS') or multiprocessing.cpu_count() ncores = int(ncores) for npar in range(int(round(math.sqrt(ncores))), ncores): if ncores % npar == 0: incar["NPAR"] = npar break incar.write_file("INCAR") except: pass if self.settings_override is not None: VaspModder().apply_actions(self.settings_override)
def setup(self): """ Performs initial setup for VaspJob, including overriding any settings and backing up. """ files = os.listdir(".") num_structures = 0 if not set(files).issuperset(VASP_INPUT_FILES): for f in files: try: struct = read_structure(f) num_structures += 1 except: pass if num_structures != 1: raise RuntimeError("{} structures found. Unable to continue." .format(num_structures)) else: self.default_vis.write_input(struct, ".") if self.backup: for f in VASP_INPUT_FILES: shutil.copy(f, "{}.orig".format(f)) if self.auto_npar: try: incar = Incar.from_file("INCAR") #Only optimized NPAR for non-HF and non-RPA calculations. if not (incar.get("LHFCALC") or incar.get("LRPA") or incar.get("LEPSILON")): if incar.get("IBRION") in [5, 6, 7, 8]: # NPAR should not be set for Hessian matrix # calculations, whether in DFPT or otherwise. del incar["NPAR"] else: import multiprocessing # try sge environment variable first # (since multiprocessing counts cores on the current machine only) ncores = os.environ.get('NSLOTS') or multiprocessing.cpu_count() ncores = int(ncores) for npar in range(int(math.sqrt(ncores)), ncores): if ncores % npar == 0: incar["NPAR"] = npar break incar.write_file("INCAR") except: pass if self.settings_override is not None: VaspModder().apply_actions(self.settings_override)