def _main(): parser = argparse.ArgumentParser("Calculation of gaps", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("--subdir", type=str, default=None, help="Subdirectory under work_base where calculation was run") parser.add_argument("--threshold_K", type=float, default=0.9, help="Threshold for deciding if a state is dominated by one layer") parser.add_argument("--threshold_Gamma", type=float, default=0.6, help="Threshold for deciding if a state is dominated by one layer") parser.add_argument("--spin_valence", type=str, default=None, help="Set 'up' or 'down' to choose valence band spin type; closest to E_F is used if not set") parser.add_argument("--spin_conduction", type=str, default=None, help="Set 'up' or 'down' to choose conduction band spin type; closest to E_F is used if not set") parser.add_argument("--D", type=float, default=None, help="Perpendicular electric field value [V/nm]") parser.add_argument('global_prefix', type=str, help="Calculation name") args = parser.parse_args() gconf = _global_config() work = os.path.expandvars(gconf["work_base"]) if args.subdir is not None: work = os.path.join(work, args.subdir) prefixes = get_prefixes(work, args.global_prefix) if args.D is not None: prefixes = filter_to_D(prefixes, args.D) ds = ds_from_prefixes(prefixes) ds, prefixes = wrap_cell(ds, prefixes) dps = sorted_d_group(ds, prefixes) K = (1/3, 1/3, 0.0) layer_labels = ["bot.", "top"] relax_data = get_relax_data(work, dps) plot_relax_data(relax_data, dps) gap_data_K = get_gap_data(work, dps, args.threshold_K, args.spin_valence, args.spin_conduction, K, "K") plot_gap_data(gap_data_K, dps, "K", "$K$", layer_labels) Gamma = (0.0, 0.0, 0.0) gap_data_Gamma = get_gap_data(work, dps, args.threshold_Gamma, args.spin_valence, args.spin_conduction, Gamma, "Gamma", use_curvature=False) plot_gap_data(gap_data_Gamma, dps, "Gamma", r"$\Gamma$", layer_labels, use_curvature=False)
def _main(): parser = argparse.ArgumentParser( "Find calculations with missing files.", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument( "--subdir", type=str, default=None, help="Subdirectory under work_base where calculation has been run") parser.add_argument("--global_prefix", type=str, default="WSe2_WSe2_WSe2", help="Prefix for calculation") parser.add_argument( "--depth", type=int, default=1, help="How many subdirectories to search inside each calculation.") parser.add_argument( "missing_pattern", type=str, help= "Regular expression pattern identifying files to search for. Report calculations where no file matches the pattern." ) args = parser.parse_args() gconf = _global_config() base_path = os.path.expandvars(gconf["work_base"]) if args.subdir is not None: base_path = os.path.join(base_path, args.subdir) prefixes = get_prefixes(base_path, args.global_prefix) missing_pattern_re = re.compile(args.missing_pattern) missing = [] for prefix in prefixes: in_dir = os.path.join(base_path, prefix) if find_pattern(in_dir, missing_pattern_re, args.depth) is None: missing.append(prefix) for missing_prefix in missing: print(missing_prefix)
def _main(): parser = argparse.ArgumentParser(description="Plot various quantities as function of displacement") parser.add_argument("--subdir", type=str, default=None, help="Subdirectory under work_base where calculation was run") parser.add_argument('--global_prefix', type=str, default="MoS2_WS2", help="Calculation global prefix") args = parser.parse_args() gconf = _global_config() work = os.path.expandvars(gconf["work_base"]) if args.subdir is not None: work = os.path.join(work, args.subdir) prefixes = get_prefixes(work, args.global_prefix) ds = ds_from_prefixes(prefixes) ds, prefixes = wrap_cell(ds, prefixes) dps = sorted_d_group(ds, prefixes) write_out_data = {"_ds": []} for d, prefix in dps: write_out_data["_ds"].append(d) energies = get_energies(work, dps) energies_rel_meV = energies_relative_to(energies, dps, (0.0, 0.0)) E_title = "$\\Delta E$ [meV]" E_plot_name = "{}_energies".format(args.global_prefix) plot_d_vals(E_plot_name, E_title, dps, energies_rel_meV) write_out_data["meV_relative_total_energy"] = energies_rel_meV soc = True Hk_vals = extract_Hk_vals(work, dps, soc) for label, this_vals in Hk_vals.items(): title = label plot_name = "{}_{}".format(args.global_prefix, label) plot_d_vals(plot_name, title, dps, this_vals) write_out_data["eV_{}".format(label)] = this_vals
def _main(): parser = argparse.ArgumentParser( "Calculate optical matrix elements", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument( "--subdir", type=str, default=None, help="Subdirectory under work_base where calculation was run") parser.add_argument('global_prefix', type=str, help="Calculation name") args = parser.parse_args() gconf = _global_config() work = os.path.expandvars(gconf["work_base"]) if args.subdir is not None: work = os.path.join(work, args.subdir) prefixes = get_prefixes(work, args.global_prefix) ds = ds_from_prefixes(prefixes) ds, prefixes = wrap_cell(ds, prefixes) dps = sorted_d_group(ds, prefixes) write_optical_data(work, dps)
def _main(): parser = argparse.ArgumentParser( "Report band extrema and their layer / spin weights", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument( "--subdir", type=str, default=None, help="Subdirectory under work_base where calculation was run") parser.add_argument( "--num_layers", type=int, default=2, help= "Number of layers in system (determines number of band extrema to consider)" ) parser.add_argument("--D", type=float, default=None, help="Perpendicular electric field value [V/nm]") parser.add_argument('global_prefix', type=str, help="Calculation name") args = parser.parse_args() gconf = _global_config() work = os.path.expandvars(gconf["work_base"]) if args.subdir is not None: work = os.path.join(work, args.subdir) prefixes = get_prefixes(work, args.global_prefix) if args.D is not None: prefixes = filter_to_D(prefixes, args.D) ds = ds_from_prefixes(prefixes) ds, prefixes = wrap_cell(ds, prefixes) dps = sorted_d_group(ds, prefixes) K = (1 / 3, 1 / 3, 0.0) layer_labels = ["bot.", "top"] relax_data = get_relax_data(work, dps) plot_relax_data(relax_data, dps) K_num_valence_bands = args.num_layers K_num_conduction_bands = 2 * args.num_layers Gamma_num_valence_bands = 2 Gamma_num_conduction_bands = 4 extrema_data_K = get_extrema_data(work, dps, K, "K", args.num_layers, K_num_valence_bands, K_num_conduction_bands) plot_extrema_data(extrema_data_K, dps, "K", "$K$", layer_labels) Gamma = (0.0, 0.0, 0.0) extrema_data_Gamma = get_extrema_data(work, dps, Gamma, "Gamma", args.num_layers, Gamma_num_valence_bands, Gamma_num_conduction_bands) plot_extrema_data(extrema_data_Gamma, dps, "Gamma", r"$\Gamma$", layer_labels)