コード例 #1
0
def generate_energy_data_global_minimum():
    jobdef_file = "scripts/JobDef.json"
    jobdef = JobDef(jobdef_file)
    modelfile = "models/TBcanonical_s.json"
    model = Model(modelfile)
    input_density_file = "scripts/rho.json"
    input_density = InputDensity(input_density_file)

    with BackupFiles(input_density_file, jobdef_file, modelfile):
        jobdef.write_total_energy()
        jobdef.update_hamiltonian("scase")
        jobdef.update_model("TBcanonical_s")
        jobdef.update_input_rho(input_density_file)

        results_dir = jobdef['results_dir']
        energy_file = os.path.join(jobdef['results_dir'], "energy.txt")
        energy_array_filename = os.path.join(results_dir, "total_energy_array_global_minimum.csv")
        execution_args = ['pylato/main.py', jobdef_file]

        U_array = np.linspace(0.005, 10, num=100)
        energy_array = []
        for U in U_array:
            input_density.update_U(U)
            energy_array.append(calculate_energy_result(
                U, 0, 0, model, energy_file, execution_args))

        x_label = "U/|t|"
        y_label = "energy/eV"
        save_1D_raw_data(U_array, energy_array, x_label, y_label, energy_array_filename)
コード例 #2
0
def generate_mag_mom_corr_pcase():
    jobdef_file = "scripts/JobDef.json"
    jobdef = JobDef(jobdef_file)
    modelfile = "models/TBcanonical_p.json"
    model = Model(modelfile)

    electrons_of_interest = [2]
    with BackupFiles(jobdef_file, modelfile):
        jobdef.write_magnetic_correlation()
        jobdef.write_groundstate_classification()
        jobdef.update_hamiltonian("pcase")
        jobdef.update_model("TBcanonical_p")

        results_dir = jobdef['results_dir']
        mag_corr_file = os.path.join(results_dir, "mag_corr.txt")
        classification_file = os.path.join(results_dir, "classification.txt")
        execution_args = ['pylato/main.py', jobdef_file]

        U_array = np.linspace(0.005, 10, num=50)
        J_array = np.linspace(0.005, 2.5, num=50)
        for num_electrons in electrons_of_interest:
            model.update_num_electrons(num_electrons)

            mag_corr_result_filename = os.path.join(
                results_dir,
                "mag_mom_corr_and_class_pcase_{}_electrons_per_atom.csv".
                format(num_electrons))
            mag_corr_result = {}
            classification_result = {}
            for U_index, U in enumerate(U_array):
                for J_index, J in enumerate(J_array):
                    key = (U_index, J_index)
                    if U >= J:
                        mag_corr_result[key], classification_result[key] = (
                            calculate_mag_corr_result(
                                U,
                                J,
                                0,
                                model,
                                mag_corr_file,
                                execution_args,
                                classification_file=classification_file))
                    else:
                        mag_corr_result[key] = None
                        classification_result[key] = None

            x_label = "U/|t|"
            y_label = "J/|t|"
            values_label = "C_avg"
            extra_info_label = "classification"
            save_2D_with_extra_info_raw_data(
                x_vals=U_array,
                y_vals=J_array,
                results=mag_corr_result,
                extra_info=classification_result,
                labels=[x_label, y_label, values_label, extra_info_label],
                filename=mag_corr_result_filename)
コード例 #3
0
def generate_energy_data_dcase():
    jobdef_file = "scripts/JobDef.json"
    jobdef = JobDef(jobdef_file)
    modelfile = "models/TBcanonical_d.json"
    model = Model(modelfile)

    electrons_of_interest = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    with BackupFiles(jobdef_file, modelfile):
        jobdef.write_total_energy()
        jobdef.update_hamiltonian("dcase")
        jobdef.update_model("TBcanonical_d")

        results_dir = jobdef['results_dir']
        energy_file = os.path.join(results_dir, "energy.txt")
        filename = "total_energy_array_dcase_{}_electrons_per_atom_dJ_{}.csv"
        execution_args = ['pylato/main.py', jobdef_file]

        dJ_val1 = 0.0
        dJ_val2 = 0.1
        U_array = np.linspace(0.005, 10, num=5)
        J_array = np.linspace(0.005, 2.5, num=5)
        for num_electrons in electrons_of_interest:
            model.update_num_electrons(num_electrons)
            energy_array_filename_1 = os.path.join(
                results_dir,
                filename.format(num_electrons, dJ_val1)
            )
            energy_array_filename_2 = os.path.join(
                results_dir,
                filename.format(num_electrons, dJ_val2)
            )
            energy_result_1 = {}
            energy_result_2 = {}
            for U_index, U in enumerate(U_array):
                for J_index, J in enumerate(J_array):
                    if U >= J:
                        energy_result_1[(U_index, J_index)] = calculate_energy_result(
                            U, J, dJ_val1, model, energy_file, execution_args)
                        energy_result_2[(U_index, J_index)] = calculate_energy_result(
                            U, J, dJ_val2, model, energy_file, execution_args)
                    else:
                        energy_result_1[(U_index, J_index)] = None
                        energy_result_2[(U_index, J_index)] = None

            x_label = "U/|t|"
            y_label = "J/|t|"
            values_label = "energy/eV"
            save_2D_raw_data(U_array, J_array, energy_result_1, x_label, y_label, values_label, energy_array_filename_1)
            save_2D_raw_data(U_array, J_array, energy_result_2, x_label, y_label, values_label, energy_array_filename_2)
コード例 #4
0
def generate_mag_mom_corr_scase_global_minimum():
    jobdef_file = "scripts/JobDef.json"
    jobdef = JobDef(jobdef_file)
    modelfile = "models/TBcanonical_s.json"
    model = Model(modelfile)
    input_density_file = "scripts/rho.json"
    input_density = InputDensity(input_density_file)

    with BackupFiles(input_density_file, jobdef_file, modelfile):
        jobdef.write_magnetic_correlation()
        jobdef.write_groundstate_classification()
        jobdef.update_hamiltonian("scase")
        jobdef.update_model("TBcanonical_s")
        jobdef.update_input_rho(input_density_file)

        results_dir = jobdef['results_dir']
        mag_corr_file = os.path.join(results_dir, "mag_corr.txt")
        classification_file = os.path.join(results_dir, "classification.txt")
        mag_corr_array_filename = os.path.join(
            results_dir, "mag_mom_corr_with_class_scase_global_minimum.csv")
        execution_args = ['pylato/main.py', jobdef_file]

        U_array = np.linspace(0.005, 10, num=100)
        mag_corr_array = []
        classification_array = []
        for U in U_array:
            input_density.update_U(U)

            mag_corr, classification = calculate_mag_corr_result(
                U,
                0,
                0,
                model,
                mag_corr_file,
                execution_args,
                classification_file=classification_file)
            mag_corr_array.append(mag_corr)
            classification_array.append(classification)

        x_label = "U/|t|"
        y_label = "C_avg"
        extra_info_label = "classification"
        save_1D_with_extra_info_raw_data(
            x_vals=U_array,
            results=mag_corr_array,
            extra_info=classification_array,
            labels=[x_label, y_label, extra_info_label],
            filename=mag_corr_array_filename)
コード例 #5
0
def generate_energy_data_pcase():
    jobdef_file = "scripts/JobDef.json"
    jobdef = JobDef(jobdef_file)
    modelfile = "models/TBcanonical_p.json"
    model = Model(modelfile)

    with BackupFiles(jobdef_file, modelfile):
        jobdef.write_total_energy()
        jobdef.update_hamiltonian("pcase")
        jobdef.update_model("TBcanonical_p")

        results_dir = jobdef['results_dir']
        energy_file = os.path.join(results_dir, "energy.txt")
        execution_args = ['pylato/main.py', jobdef_file]

        U_array = np.linspace(0.005, 10, num=20)
        J_array = np.linspace(0.005, 2.5, num=20)
        for num_electrons in range(1, 6):
            model.update_num_electrons(num_electrons)

            energy_array_filename = os.path.join(
                results_dir,
                "total_energy_array_pcase_{}_electrons_per_atom.csv".format(
                    num_electrons)
            )

            energy_result = {}
            for U_index, U in enumerate(U_array):
                for J_index, J in enumerate(J_array):
                    energy_result[(U_index, J_index)] = calculate_energy_result(
                        U, J, 0, model, energy_file, execution_args)

            x_label = "U/|t|"
            y_label = "J/|t|"
            values_label = "energy/eV"
            save_2D_raw_data(U_array, J_array, energy_result, x_label, y_label, values_label, energy_array_filename)