statistics = univariate_statistics(data) x_min = statistics[2] x_max = statistics[3] y_min = statistics[4] y_max = statistics[5] # G. Fit a quadratic polynomial to the data using quadratic_fit function quadratic_coefficients = quadratic_fit(data) # H. Pass 'vinet' to fit_eos volumes = data[:, 0] energies = data[:, 1] vinet = fit_eos(volumes, energies, quadratic_coefficients, 'vinet') # I. Write a convert_units module for atomic units for i in range(len(data)): volume = data[i][0] energy = data[i][1] volume = convert_units(volume, 'Cubic Bohr/atom', 'Cubic Angstrom/atom') energy = convert_units(energy, 'Rydberg/atom', 'electron volts/atom') # data[i][0] = volume # data[i][1] = energy for i in range(len(vinet)): bulk = vinet[i] bulk = convert_units(bulk, 'Rydberg/Cubic Bohr', 'Gigapascals')
# 4. statistics = us.univariate_statistics(data1) print('Statistics of data:') print(statistics) # 5. quadratic_coefficients = qf.quadratic_fit(data1) print('Quadratic coefficients of revised data:') print(quadratic_coefficients) # 6. volumes = data1[:, 0] energies = data1[:, 1] eos_passed_info, eos_parameters = eos.fit_eos(volumes, energies, quadratic_coefficients, my_eos, number_of_points=50) print('Fitted Data/Quadratic Coefficients:') print(eos_passed_info) equilibrium_volume = eos_parameters[3] bulk_modulus = eos_parameters[1] print(bulk_modulus) # 7. def convert_units(value_to_convert_from, units_of_value_converted_from, unit_to_convert_to): if units_of_value_converted_from == 'cubic bohr/atom': value_in_requested_units = value_to_convert_from * 0.148185 elif units_of_value_converted_from == 'rydberg/atom':
#fit_curve = fit_curve_array(quadratic_coefficients, min_x, max_x, number_of_points=100) #scatter_plot, curve_plot = plot_data_with_fit(array, fit_curve, data_format="bo", #fit_format="k") #plt.show() #plt.savefig("Initial_plot.png") """ """ \/\/attempting the annotation \/\/ """ undo_array = zip(*array) array_2 = list(undo_array) # fit_eos_curve, bulk_modulus = fit_eos(array_2[0], array_2[1], quadratic_coefficients, eos='murnaghan', number_of_points=50) #6 fit_eos_curve, fit_parameters = fit_eos(array[0], array[1], quadratic_coefficients, eos='murnaghan', number_of_points=50) #6 bulk_modulus = fit_parameters[1] equilibrium_volume = fit_parameters[3] #print(fit_eos, bulk_modulus) def annotate_graph(symbol, structure): ax.annotate(symbol, xy=(130, 0.001)) ax.annotate(r'$ {}\overline{{{}}} {}$'.format(structure[0:2], structure[3], structure[1]), xy=(115, 0))
chemical_symbol = names[0] crystal_symetery = names[1] d_f_c_a = names[2] return chemical_symbol, crystal_symetery, d_f_c_a array = two_column_text_read("Ag.Fm-3m.GGA-PBE.volumes_energies.dat") stats = bivariate_statistics(array) #print(stats) quadratic_coefficients = quadratic_fit(array) volumes = array[0, :] energies = array[1, :] fit_eos_array, fit_parameters = fit_eos(volumes, energies, quadratic_coefficients, eos="murnaghan", number_of_points=50) fit_volumes = np.linspace(volumes[0], volumes[-1], 50) bulk_modulus = fit_parameters[1] equilibrium_volume = fit_parameters[3] print(equilibrium_volume) # Define an array of fit volumes going from volumes[0] to volumes[-1] but equal in number of points to fit_eos_array plt.plot(volumes, energies, 'bo') plt.plot(fit_volumes, fit_eos_array, 'k') plt.xlabel(r'$\mathit{V}(\AA^3$/atom)') plt.ylabel(r'$\mathit{E}$ (eV/atom)') plt.title('Murnaghan Equation of State for Ag in DFT GGA-PBE') plt.text(100.79, -287.32865, 'Created by Cheo Reyes 2020-05-12') plt.text(120.94, -287.32250,'$\mathit{V}=120.549(\AA^3$/atom)') plt.text(100.73, -287.31470, "Ag") plt.text(115.19, -287.32454,'$\mathit{Fm}3\mathit{m}$')
#4 statistics = univariate_statistics(data) #5 quadratic_coefficients = quadratic_fit(data) #6 """ Must reformat data before finding fit curve. """ un_data = zip(*data) data_2 = list(un_data) volumes = data_2[0] energies = data_2[1] eos_fit_curve, bulk_modulus = fit_eos(volumes, energies, quadratic_coefficients, eos=my_eos) #7 """ Convert units module """ def convert_units(value_to_be_converted, units_of_value_to_be_converted_from, units_to_be_converted_to): """ :param value_to_be_converted: Somevalue :param units_of_the_value_to_be_converted_from: Accepted units: cb/a, rb/a, rb/cb :param units_to_be_converted_to: Accepted units: ca/a, ev/a, GPa :return: value_in_the_requested_units """ if units_of_value_to_be_converted_from == "cb/a":
statistics = univariate_statistics(data) mean = (statistics[0]) standard_deviation = statistics[1] min_x = statistics[2] max_x = statistics[3] min_y = statistics[4] max_y = statistics[5] quadratic_coefficients = quadratic_fit(data) un_data = zip(*data) data_list = list(un_data) Eos_fit = fit_eos(data[0], data[1], quadratic_coefficients, eos='birch-murnaghan', number_of_points=50) fit_curve = fit_curve_array(Eos_fit, min_x, max_x) bulkmodulus = 230 volume = convert_units(data[0], 'cb/a') energy = convert_units(data[1], 'rb/a') def annotate_plot(chem_symb, crystal_symm, density_ex): import matplotlib.pyplot as mp annotation_chem = mp.annotate(chem_symb, xy=(200, 0.028)) annotation_crys = mp.annotate(crystal_symm, xy=(230, -.036)) annotation_dens = mp.annotate(density_ex, xy=(220, -.039)) return (annotation_chem, annotation_crys, annotation_dens)