Esempio n. 1
0
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
Esempio n. 4
0
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)
Esempio n. 5
0
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)