from Locpot_class import *
from pymatgen.io.vasp.outputs import Locpot, Vasprun
from pymatgen.core.structure import Structure, Lattice
from Stage_1 import *
from Stage_2 import *
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import math
import os
import PySimpleGUI as sg
[docs]def convert_to_type(values_dic):
for k, it in values_dic.items():
try:
values_dic[k] = np.float64(it)
except ValueError:
pass
return values_dic
[docs]def Gui():
#if __name__ == '__main__':
sg.theme('DarkAmber') # Keep things interesting for your users
SYMBOL_UP = '▲'
SYMBOL_DOWN = '▼'
# ------ Menu Definition ------ #
menu_def = [['File', ['Open', 'Save', 'Exit', 'Properties']],
['Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ],
['Help', 'About...'], ]
layout = [[sg.Menu(menu_def, tearoff=False)],
[sg.Text('Wave Function propagation Gui', size=(50, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Open the locpot file of your system. If you have the locpot of your bulk materials, you should supply them too')],
[sg.Text('Main Locpot File', size=(18, 1)), sg.Input(), sg.FileBrowse()],
[sg.Text('Bulk material locpot 1', size=(18, 1)), sg.Input(), sg.FileBrowse()],
[sg.Text('Bulk material locpot 2', size=(18, 1)), sg.Input(), sg.FileBrowse()],
[sg.Text('If you want your E0 to be imported from your calculation, please Load here your', size=(60, 1))],
[sg.Text('vapsrun file - for the bulk material you wish to initialize the electron at',size=(60, 1))],
[sg.Text('vasprun file', size=(18, 1)), sg.Input(), sg.FileBrowse(key='-vasprun_file-')],
[sg.Frame('select',layout=[[sg.Checkbox('Has an interface?', size=(20,1),default=False, key='-interface-')], [sg.Checkbox('Is 2D?', default=False,disabled=True,key='-2D-')],[sg.Checkbox('Define a certain range?', default=False,key='-Range-')],
[sg.Checkbox('Flip sides of your interface', default=False,key='-flip-')]])] ,
[sg.Text('What convergence test you wish to perform?')],
[sg.Frame('Convergence Tests',layout=[[sg.Checkbox('spatial grid density', size=(40,1),key='-density-')], [sg.Checkbox('System size', size=(40,1),key='-sys_size-')],[sg.Checkbox('Time steps', size=(40,1),key='-dt-')]])],
[sg.Text('Please input here the initial energy. The energy of an electron at the bottom of the conduction band. In units of Joules')],
[sg.In(default_text=5e-19, size=(10, 1),key='-E0-')],
[sg.Text(
'Please input here the standard deviation of the guassian wave function. This should be given in units of Meter')],
[sg.In(default_text=0.7e-10, size=(10, 1), key='-sigma-')],
[sg.Text(
'Please input here the Initial number of time steps. The number of dt the overall simulation will undergo. This should be an integer')],
[sg.In(default_text=500, size=(10, 1), key='-Nt-')],
[sg.Text(
'Please input here the Initial value of your time step, dt. It will be used as an initial guess of the default value')],
[sg.In(default_text=0.5e-17, size=(10, 1), key='-initial_dt-')],
[sg.Text('Please choose the axis you wish to average the local potential')],
[sg.Frame('axes',layout=[[sg.Checkbox('x', size=(20,1),key='-x_axis_grid-')],[sg.Checkbox('y', size=(20,1),key='-y_axis_grid-')],[sg.Checkbox('z', size=(20,1),key='-z_axis_grid-',default=True)]])],
[sg.Text('Choose from the options what you would like to do')],
[sg.Frame('Options',layout=[[sg.Checkbox('Print averaged local potential', size=(40,1),key='-Pr_avg_locpot-')], [sg.Checkbox('Extend Locpot', size=(40,1),key='-ext_locpot-')],[sg.Checkbox('Full propagation', size=(40,1),key='-Full_prop-')],
[sg.Checkbox('Transmission coefficient', size=(40,1),key='-Trans_coeff-')],[sg.Checkbox('Cumulative probability', size=(40,1),key='-cum_prob-')],
[sg.Checkbox('Modeling the interface', size=(40,1),key='-modeling_interface-')]])],
[sg.Submit(), sg.Cancel()],
[sg.Text('')],[sg.Text('')]]
column = [[sg.Column(layout,scrollable=True,key='Column',size=(900,3000))]]
window = sg.Window('Propagate wave-function Menu ', column,resizable=False, size=(900,3000))
event, values = window.read()
window.close()
overall_values = {}
overall_values.update(values)
if overall_values['Browse'] == "" and not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel'):
overall_values['Browse'] = sg.popup_get_file('You must supply the locpot of your system.')
if overall_values['Browse'] == "":
sg.popup_error('You must supply The locpot file of your system')
SystemError('You must supply The locpot file of your system')
# ------------------------------------------------------------------------------------------
#...........................................................................................
# ------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------
# ..........................................................................................
# if not overall_values['-dt-'] and not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel'):
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('Please supply the size of dt you want to apply, in seconds, scale of fsec', size=(100, 1))],
# [sg.In(default_text=0.1e-16, size=(20, 1),key='-initial_dt-')],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Initial Time step magnitue ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
# elif not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel'):
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('Do you want to change the initial value of dt? You can edit it here', size=(100, 1))],
# [sg.In(default_text=0.1e-16, size=(20, 1),key='-initial_dt-')],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Initial Time step magnitue ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
# ------------------------------------------------------------------------------------------
# ..........................................................................................
# ------------------------------------------------------------------------------------------
# Main menu handling, # axis grid definition
# Processing the very first information.
# Loading the locpot, reading the gird axis - to be able to plot basic plots.
try:
event_temp
except NameError:
event_temp = 'Cancel'
already_plotted_base_loc_vec=False
# General operations before starting.
# Defining grid axis, Loading Locpots from the browser.
if not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel'):
overall_values = convert_to_type(overall_values)
if overall_values['-x_axis_grid-']:
axis = 0
elif overall_values['-y_axis_grid-']:
axis = 1
else:
axis = 2
# Locpot files loading
if overall_values['Browse0'] =="" and not overall_values['Browse1'] =="":
overall_values['Browse0'] = overall_values['Browse1']
overall_values['Browse1'] = ""
if not overall_values['Browse0'] =="":
if not overall_values['Browse1'] =="":
Locp = Locpot_yair(Locpot_Full_path= overall_values['Browse'],Locpot_bulk_materials_full_path=[overall_values['Browse0'],overall_values['Browse1']],axis_index=axis,Has_interface=overall_values['-interface-'],to_flip=overall_values['-flip-'])
else:
Locp = Locpot_yair(Locpot_Full_path=overall_values['Browse'],
Locpot_bulk_materials_full_path=overall_values['Browse0'],
axis_index=axis, Has_interface=overall_values['-interface-'],to_flip=overall_values['-flip-'])
else:
Locp = Locpot_yair(Locpot_Full_path=overall_values['Browse'],
axis_index=axis, Has_interface=overall_values['-interface-'],to_flip=overall_values['-flip-'])
# ------------------------------------------------------------------------------------------
# ..........................................................................................
# ------------------------------------------------------------------------------------------
# Handling the type of system you chose.
# if does not have an interface and didnt provide a range.
# in this case the user will be rquired to supply a reference point to be treated as an interface point.
if not overall_values['-interface-'] and not overall_values['-Range-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')) and not overall_values['-ext_locpot-'] and (overall_values['-Trans_coeff-'] or overall_values['-Full_prop-'] or overall_values['-cum_prob-']) :
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Please supply the position where you want to treat as a reference point.',
size=(80, 1)),
[sg.In(default_text='0', size=(10, 1), key='-ref_pos-')]],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Reference Position ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-ref_pos-'] = np.float64(overall_values['-ref_pos-'])
overall_values['-ref_pos-'] = cons.A2m(overall_values['-ref_pos-'])
# Handling the type of system you chose.
# if does not have an interface but did provide a range.
# in this case the user will be rquired to supply the range limits..
if overall_values['-Range-'] and not overall_values['-interface-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text(
'Please supply the initial and final positions where you want to define your system.',
size=(80, 1))],
[[sg.Text('Start Position, in [M]', size=(10, 1))],
[sg.In(default_text=0, size=(10, 1), key='-Initi_pos-')]],
[[sg.Text('Final Position, in [M]', size=(10, 1))],
[sg.In(default_text=0, size=(10, 1), key='-Final_pos-')]],
[[sg.Text('Please supply the position where you want to treat as a reference point.',
size=(80, 1))],
[sg.In(default_text=0, size=(10, 1), key='-ref_pos-')]],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Range Choice ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-Initi_pos-'] = np.float64(overall_values['-Initi_pos-'])
overall_values['-Final_pos-'] = np.float64(overall_values['-Final_pos-'])
overall_values['-ref_pos-'] = np.float64(overall_values['-ref_pos-'])
overall_values['-Initi_pos-'] = cons.A2m(overall_values['-Initi_pos-'])
overall_values['-Final_pos-'] = cons.A2m(overall_values['-Final_pos-'])
overall_values['-ref_pos-'] = cons.A2m(overall_values['-ref_pos-'])
# Handling the type of system you chose.
# if does have an interface and provide a range.
# in this case the user will be rquired to supply the range limits and a reference point.
if overall_values['-Range-'] and overall_values['-interface-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text(
'Please supply the initial and final positions where you want to define your system.',
size=(80, 1))],
[[sg.Text('Start Position, in [M]', size=(10, 1))],
[sg.In(default_text='0', size=(10, 1), key='-Initi_pos-')]],
[[sg.Text('Final Position, in [M]', size=(10, 1))],
[sg.In(default_text='0', size=(10, 1), key='-Final_pos-')]],
[[sg.Text('Please supply the position where you want to treat as a reference point.',
size=(80, 1))],
[sg.In(default_text=0, size=(10, 1), key='-ref_pos-')]],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Range and interface Choice ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-ref_pos-'] = np.float64(overall_values['-ref_pos-'])
overall_values['-ref_pos-'] = cons.A2m(overall_values['-ref_pos-'])
overall_values['-Initi_pos-'] = np.float64(overall_values['-Initi_pos-'])
overall_values['-Final_pos-'] = np.float64(overall_values['-Final_pos-'])
overall_values['-Initi_pos-'] = cons.A2m(overall_values['-Initi_pos-'])
overall_values['-Final_pos-'] = cons.A2m(overall_values['-Final_pos-'])
# ------------------------------------------------------------------------------------------
# ...........................................................................................
# ------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------
# ...........................................................................................
# ------------------------------------------------------------------------------------------
# Handling the convergence tests
# Grid-density convergence test:
# first step is to get information about the spatial partition - the Nt's number.
# is independent of if the user chose to perform grid density convergence test or not.
if not overall_values['-density-'] and overall_values['-Nt-'] == "" and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text(
'Please supply the number of spatial partition you wish your system to have. The # of dx`s ',
size=(50, 1))],
[[sg.Text('It should be an integer. Nt = ', size=(40, 1))],
[sg.In(default_text='100', size=(20, 1), key='-Nt-')]],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Nt Choice ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# if the user chose to perform grid-density convergence test - it will asked him to provide the number of max
# iterations the loop will be going through.
if overall_values['-density-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text(
'Please supply the maximum number of iterations you wish to perform during the grid-density convegence',
size=(100, 1))],
[sg.In(default_text=20, size=(20, 1), key='-conv_dens_iter-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Grid density convergence Choice for maximum number of iterations ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# ------------------------------------------------------------------------------------------
# ...........................................................................................
# ------------------------------------------------------------------------------------------
# The only operation that might affect the convergence tests:
# extending the local potential vector.
if overall_values['-ext_locpot-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('How do you want to extend your Locpot?', size=(100, 1))],
[sg.Frame('Locpot Elongation',
layout=[[sg.Checkbox('Insertaion into a position within the locpot', size=(60, 1),
key='-ex_loc_insert-')],
[sg.Checkbox('Just multiplication', size=(40, 1), key='-ex_loc_mul-')]])],
[sg.Text(
'find a bulk-like Locpot region, or choose it manually? ',
size=(100, 1))],
[sg.Frame('What to insert',
layout=[[sg.Checkbox('bulk-like locpot', size=(40, 1), key='-ex_loc_bulk_like-')],
[sg.Checkbox('Choose manually', size=(40, 1), key='-ex_loc_choose_manu-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locpot elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# if you dont have an interface - it asks the user to supply how many time to multiply it and where to insert it.
if overall_values['-ext_locpot-'] and not overall_values['-interface-'] and not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel'):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('How many times you would like to multiply the locpot', size=(70, 1))],
[sg.Text('It will also going to be used as the number of times the inserted part will be multiplied',size=(100, 1))],
[sg.In(default_text=10, size=(20, 1), key='-ex_loc_multi-')],
[sg.Text('If you chose to insert into a certain position, please supply it here, in units of Angstrum',size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-ex_loc_insert_pos-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locpot elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# If the user defined his system to have an interface he can choose from what side to elongate his locpot.
if overall_values['-ext_locpot-'] and overall_values['-interface-'] and not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel'):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Do you want to elongate from both sizes of the interface, or just from one side',size=(100, 1))],
[sg.Text('Please choose only one category and fill only it in',size=(100, 1))],
[sg.Frame('Locpot Elongation', layout=[
[sg.Checkbox('Both sizes', size=(40, 1), key='-ex_loc_both-')],
[sg.Text('How many times', size=(40, 1))],
[sg.In(default_text=10, size=(20, 1), key='-ex_loc_both_multi-')],
[sg.Checkbox('Right size', size=(40, 1), key='-ex_loc_right-')],
[sg.Text('How many times', size=(40, 1))],
[sg.In(default_text=0, size=(20, 1), key='-ex_loc_right_multi-')],
[sg.Checkbox('Left size', size=(40, 1), key='-ex_loc_left-')],
[sg.Text('How many times', size=(40, 1))],
[sg.In(default_text=0, size=(20, 1), key='-ex_loc_left_multi-')]
]
)],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locpot elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values = convert_to_type(overall_values)
# Choosing manually the region to be multiplied
# ========================================================================
if overall_values['-ext_locpot-'] and overall_values['-interface-'] and overall_values['-ex_loc_choose_manu-'] and overall_values['-ex_loc_both-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Frame('Locpot Elongation', layout=[
[sg.Text('choose range from the left side', size=(40, 1))],
[sg.Text('Initial position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_left_init_pos-')],
[sg.Text('Final position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_left_final_pos-')],
[sg.Text('choose range from the Right side', size=(40, 1))],
[sg.Text('Initial position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_right_init_pos-')],
[sg.Text('Final position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_right_final_pos-')],
])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Interface system elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values = convert_to_type(overall_values)
overall_values['-ex_loc_choose_manu_left_init_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_left_init_pos-'])
overall_values['-ex_loc_choose_manu_left_init_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_left_init_pos-'])
overall_values['-ex_loc_choose_manu_left_final_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_left_final_pos-'])
overall_values['-ex_loc_choose_manu_left_final_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_left_final_pos-'])
overall_values['-ex_loc_choose_manu_right_init_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_right_init_pos-'])
overall_values['-ex_loc_choose_manu_right_init_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_right_init_pos-'])
overall_values['-ex_loc_choose_manu_right_final_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_right_final_pos-'])
overall_values['-ex_loc_choose_manu_right_final_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_right_final_pos-'])
if overall_values['-ext_locpot-'] and overall_values['-interface-'] and overall_values['-ex_loc_choose_manu-'] and (overall_values['-ex_loc_right-'] or overall_values['-ex_loc_left-']) and \
(not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Frame('Locpot Elongation', layout=[
[sg.Text('choose range to be inserted', size=(40, 1))],
[sg.Text('Initial position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_init_pos-')],
[sg.Text('Final position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_final_pos-')]]
)],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Interface system elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values = convert_to_type(overall_values)
overall_values['-ex_loc_choose_manu_init_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_init_pos-'])
overall_values['-ex_loc_choose_manu_init_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_init_pos-'])
overall_values['-ex_loc_choose_manu_final_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_final_pos-'])
overall_values['-ex_loc_choose_manu_final_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_final_pos-'])
if overall_values['-ext_locpot-'] and not overall_values['-interface-'] and overall_values['-ex_loc_choose_manu-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not already_plotted_base_loc_vec:
Locp.averaging_along_axis(to_plot=True,to_plot_cursor_choice=True)
already_plotted_base_loc_vec = True
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Frame('Locpot Elongation', layout=[
[sg.Text('choose range to be inserted', size=(40, 1))],
[sg.Text('Initial position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_init_pos-')],
[sg.Text('Final position', size=(20, 1)),
sg.In(default_text=0, size=(20, 1), key='-ex_loc_choose_manu_final_pos-')]
])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Interface system elongation', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values = convert_to_type(overall_values)
overall_values['-ex_loc_choose_manu_init_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_init_pos-'])
overall_values['-ex_loc_choose_manu_init_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_init_pos-'])
overall_values['-ex_loc_choose_manu_final_pos-'] = np.float64(overall_values['-ex_loc_choose_manu_final_pos-'])
overall_values['-ex_loc_choose_manu_final_pos-'] = cons.A2m(overall_values['-ex_loc_choose_manu_final_pos-'])
# ========================================================================
# Before handling the convergence test we can check if we can import E0 from a vasprun file
if not overall_values['-vasprun_file-'] == '':
vasprun = Vasprun(overall_values['-vasprun_file-'])
try:
overall_values['-E0-'] = vasprun.get_band_structure().get_cbm()['energy']
overall_values['-E0-'] = cons.eV2J(overall_values['-E0-'] )
finally:
pass
# Now handling Convergence tests defined in the main form. Grid density convergence
if overall_values['-density-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not Locp.locpot_bulk_materials ==[]:
stg1 = Stage_1(Locpot_yair(input_locpot=Locp.locpot_bulk_materials[0]).locpot_vec, np.float64(overall_values['-E0-']), np.float64(overall_values['-sigma-']),
Noriginal=np.float64(overall_values['-Nt-']),
Max_z_iterations=np.int64(overall_values['-conv_dens_iter-']),
To_plot=True)
else:
stg1 = Stage_1(Locp.locpot_vec, np.float64(overall_values['-E0-']),np.float64(overall_values['-sigma-']), Noriginal=np.float64(overall_values['-Nt-']), Max_z_iterations=np.int64(overall_values['-conv_dens_iter-']),
To_plot=True)
try:
zz, vv, k0_initial, psi0, T0_run, v0_run, N_new = stg1.initial_wavefunc_energies()
except AssertionError:
if not Locp.locpot_bulk_materials == []:
zz, vv = Locpot_yair(input_locpot=Locp.locpot_bulk_materials[0]).locpot_vec.T
zz,vv = multiply_z_v_vecs(zz,vv,10)
zz, vv, k0_initial, psi0, T0_run, v0_run, N_new = stg1.initial_wavefunc_energies()
else:
zz, vv = Locpot_yair(input_locpot=Locp).locpot_vec.T
zz,vv = multiply_z_v_vecs(zz,vv,10)
zz, vv, k0_initial, psi0, T0_run, v0_run, N_new = stg1.initial_wavefunc_energies()
zz_convg, vv_convg, psi0_convg, grid_density, psi0_dic = stg1.converge_main_axis_grid(tol=0.001)
elif (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if not Locp.locpot_bulk_materials == []:
stg1 = Stage_1(Locpot_yair(input_locpot=Locp.locpot_bulk_materials[0]).locpot_vec, np.float64(overall_values['-E0-']), np.float64(overall_values['-sigma-']),
Noriginal=np.float64(overall_values['-Nt-']),
To_plot=True)
else:
stg1 = Stage_1(Locp.locpot_vec, np.float64(overall_values['-E0-']),np.float64(overall_values['-sigma-']), Noriginal=np.float64(overall_values['-Nt-']), Max_z_iterations=10,
To_plot=True)
try:
zz_convg, vv_convg, k0_initial, psi0_convg, T0_run, v0_run, N_new = stg1.initial_wavefunc_energies()
except AssertionError:
zz_convg, vv_convg = Locp.locpot_vec.T
zz_convg, vv_convg = multiply_z_v_vecs(zz_convg, vv_convg, 10)
zz_convg, vv_convg, k0_initial, psi0_convg, T0_run, v0_run, N_new = stg1.initial_wavefunc_energies()
psi0_dic = stg1.get_psi_dic()
grid_density = np.float64(len(zz_convg)/(zz_convg[-1]-zz_convg[0]))
###--------------------------------------------------------------------------------------------------------------
### At that point, whether the user chose or not to converge the grid density, we already have all the parameters
### required to initialize the system and move forward Stage2
###--------------------------------------------------------------------------------------------------------------
#%% Handlng with the case when the user wants to extend his system. It also distinguish between cases where we have interface and do not have an interface
if overall_values['-ext_locpot-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
# Extension locpot
# Chose just multiplication.
if overall_values['-ex_loc_mul-']:
if overall_values['-interface-']:
print('You told me that you do have an interface. It is going to multiply the whole system just as it is.'
' It makes no sense. I hope you know what you are doing..')
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=False,multi_left = overall_values['-ex_loc_left-'], multi_right = overall_values['-ex_loc_right-'])
z_temp,v_temp = stg2.current_locpot_vec.T
z_temp, v_temp = multiply_z_v_vecs(z_temp,v_temp, multi=overall_values['-ex_loc_multi-'])
stg2.elongated_locpot_vec = to_2_column_mat(z_temp, v_temp)
stg2.elongated_locpot_vec = stg2.update_converged_spatial_grid(vecor_to_update=stg2.elongated_locpot_vec,
update_converged_vec=False,
update_interface=False)
elif overall_values['-Range-']:
print('You gave me a range. It is going to multiply the whole system just as it is.'
' If you intended to multiply just a certain range within your system,'
'it is preferable to choose it manually and then insert it into a position..')
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=False,multi_left=overall_values['-ex_loc_multi-'])
z_temp,v_temp = stg2.current_locpot_vec.T
z_temp, v_temp = multiply_z_v_vecs(z_temp,v_temp, multi=overall_values['-ex_loc_multi-'])
stg2.elongated_locpot_vec = to_2_column_mat([z_temp, v_temp])
stg2.elongated_locpot_vec = stg2.update_converged_spatial_grid(vecor_to_update=stg2.elongated_locpot_vec,
update_converged_vec=False,
update_interface=False)
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=False,multi_left=overall_values['-ex_loc_multi-'])
z_temp,v_temp = stg2.current_locpot_vec.T
z_temp, v_temp = multiply_z_v_vecs(z_temp,v_temp, multi=overall_values['-ex_loc_multi-'])
stg2.elongated_locpot_vec = to_2_column_mat([z_temp, v_temp])
stg2.elongated_locpot_vec = stg2.update_converged_spatial_grid(vecor_to_update=stg2.elongated_locpot_vec,
update_converged_vec=False,
update_interface=False)
if overall_values['-ex_loc_insert-']:
# Extension locpot
# Extension locpot - insertion into position
# Chose to insert into location. Now it will be divided into two branches -
# choosing the range manually or let it automatically look for a bulk-like locpot.
if overall_values['-ex_loc_choose_manu-']:
# Extension locpot
# Extension locpot - insertion into position
# Chose to select the range to be inserted later manually.
# we would like to distinguish between the case we have an interface and the
# case we do not have an interface.
## if we have an interface - we also distinguish the case for extending from both sides or only one side.
if overall_values['-interface-'] and overall_values['-ex_loc_both-']:
minima = find_peaks_minima(Locp.locpot_vec[:,0], Locp.locpot_vec[:,1], ignore_local_minima=True)
minima_z = cons.A2m(minima[:, 0])
minima_v = minima[:, 1]
ind_start_left, pos_start_left = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_left_init_pos-'],minima_z)
ind_start_left, pos_start_left = find_closest_value_in_array(pos_start_left, cons.A2m(Locp.locpot_vec[:,0]))
ind_final_left, pos_final_left = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_left_final_pos-'],minima_z)
ind_final_left, pos_final_left = find_closest_value_in_array(pos_final_left, cons.A2m(Locp.locpot_vec[:,0]))
ind_start_right, pos_start_right = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_right_init_pos-'],minima_z)
ind_start_right, pos_start_right = find_closest_value_in_array(pos_start_right, cons.A2m(Locp.locpot_vec[:,0]))
ind_final_right, pos_final_right = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_right_final_pos-'],minima_z)
ind_final_right, pos_final_right = find_closest_value_in_array(pos_final_right, cons.A2m(Locp.locpot_vec[:,0]))
z_in_left = Locp.locpot_vec[:,0][ind_start_left:ind_final_left]
v_in_left = Locp.locpot_vec[:, 1][ind_start_left:ind_final_left]
z_in_right = Locp.locpot_vec[:,0][ind_start_right:ind_final_right]
v_in_right = Locp.locpot_vec[:, 1][ind_start_right:ind_final_right]
z_in_left,v_in_left = fix_potential_edges(z_in_left,v_in_left)
z_in_right, v_in_right = fix_potential_edges(z_in_right, v_in_right)
else:
try:
if overall_values['-Range']:
temp_locpot_z = np.array([overall_values['-Init_pos-']<=Locp.locpot_vec[:, 0] <= overall_values['-Final_pos-']])
temp_locpot_v = np.array([overall_values['-Init_pos-'] <= Locp.locpot_vec[:, 1] <=overall_values['-Final_pos-']])
minima = find_peaks_minima(temp_locpot_z, temp_locpot_v,ignore_local_minima=True)
else:
minima = find_peaks_minima(Locp.locpot_vec[:, 0], Locp.locpot_vec[:, 1],ignore_local_minima=True)
except KeyError:
minima = find_peaks_minima(Locp.locpot_vec[:, 0], Locp.locpot_vec[:, 1],ignore_local_minima=True)
minima_z = cons.A2m(minima[:, 0])
minima_v = minima[:, 1]
ind_start, pos_start = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_init_pos-'],minima_z)
ind_start, pos_start = find_closest_value_in_array(pos_start, cons.A2m(Locp.locpot_vec[:,0]))
ind_final, pos_final = find_closest_value_in_array(overall_values['-ex_loc_choose_manu_final_pos-'],minima_z)
ind_final, pos_final = find_closest_value_in_array(pos_final, cons.A2m(Locp.locpot_vec[:,0]))
z_in = Locp.locpot_vec[:,0][ind_start:ind_final]
v_in = Locp.locpot_vec[:, 1][ind_start:ind_final]
z_in, v_in = fix_potential_edges(z_in, v_in)
if overall_values['-interface-']:
# Extension locpot
# Extension locpot - insertion into position
# Defining the sides where the elongation will take place and the factors of multiplications,
# for the definition of the stg2 object.
if overall_values['-ex_loc_both-']:
side = 'both'
both_multi = overall_values['-ex_loc_both_multi-']
left_multi = 1
right_multi = 1
manual_multi = both_multi
elif overall_values['-ex_loc_right-']:
side = 'right'
right_multi = overall_values['-ex_loc_right_multi-']
left_multi = 1
manual_multi = right_multi
else:
side = 'left'
left_multi = overall_values['-ex_loc_left_multi-']
right_multi = 1
manual_multi = left_multi
# Extension locpot
# Defining stg2 object. Here we have an interface but we distinguish between the case we also defined a range or not.
if overall_values['-Range-']:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=True,multi_left = left_multi, multi_right = right_multi,
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=True, To_plot=True,multi_left = left_multi, multi_right = right_multi,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
# We have an interface. If the user chose to insert a bulk-like locpot. The insertion location is
# found automatically.
if overall_values['-ex_loc_bulk_like-']:
try:
stg2.elongate_interface_potential(from_iteslf = True,side_from_itself = side,
manual = True, multi_manual = manual_multi, interface_position= overall_values['-ref_pos-'],
To_update = True)
except KeyError:
stg2.elongate_interface_potential(from_iteslf = True,side_from_itself = side,
manual = True, multi_manual = manual_multi,
To_update = True)
# We have an interface. If the user chose to insert a manually chose region. The insertion location is
# taken from user definition of the regions.
elif overall_values['-ex_loc_choose_manu-']:
if side == 'both':
init_len = cons.m2A(stg2.current_locpot_vec[:, 0][-1])
stg2.elongate_interface_potential(from_iteslf=False, side_from_itself='left',
manual=True, multi_manual=manual_multi,z_in=z_in_left,v_in=v_in_left,
pos_to_insert=overall_values['-ex_loc_choose_manu_left_init_pos-'], To_update=True)
temp_elongated_locpot_vec = to_2_column_mat((stg2.elongated_locpot_vec[:,0],stg2.elongated_locpot_vec[:,1]))
differ = temp_elongated_locpot_vec[:, 0][-1] - cons.A2m(init_len)
stg2.elongate_interface_potential(from_iteslf=False, side_from_itself='right',z_in=z_in_right,v_in=v_in_right,
manual=True, multi_manual=manual_multi,
pos_to_insert=overall_values['-ex_loc_choose_manu_right_init_pos-']+differ,locpot_vector=temp_elongated_locpot_vec,
To_update=True,original_interface=stg2.new_interface)
else:
stg2.elongate_interface_potential(from_iteslf=False, side_from_itself=side,z_in=z_in,v_in=v_in,
manual=True, multi_manual=manual_multi,
pos_to_insert=overall_values['-ex_loc_choose_manu_init_pos-'], To_update=True)
else:
# Extension locpot
# Extension locpot - insertion into position
# We dont have an interface
side = 'Left'
# We dont have an interface. Defining the stg2 object in the cases when the user defined a desired region or not.
if overall_values['-Range-']:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],
Has_interface=False,
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=False,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
# We dont have an interface. Elongating from bulk-like locpot or from choosing the region manually.
if overall_values['-ex_loc_bulk_like-']:
stg2.elongate_interface_potential(from_iteslf=True, side_from_itself=side,
manual=True, multi_manual=overall_values['-ex_loc_multi-'],
interface_position=overall_values['-ref_pos-'],
pos_to_insert=overall_values['-ex_loc_insert_pos-'],
To_update=True)
elif overall_values['-ex_loc_choose_manu-']:
stg2.elongate_interface_potential(from_iteslf=False, side_from_itself=side,
manual=True,multi_manual=overall_values['-ex_loc_multi-'], z_in=z_in,v_in=v_in,
pos_to_insert=overall_values[
'-ex_loc_insert_pos-'], To_update=True)
if overall_values['-ext_locpot-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')) and not overall_values['-interface-'] and (overall_values['-Trans_coeff-'] or overall_values['-Full_prop-'] or overall_values['-cum_prob-']):
stg2.get_most_relevant_z_coordinate_vec()
Locp.averaging_along_axis(locpot_vec=stg2.current_locpot_vec, to_plot=True, to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('please supply your your reference point after extending the local potential vector', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-ref_pos-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locating Reference Point ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-ref_pos-'] = np.float64(overall_values['-ref_pos-'])
overall_values['-ref_pos-'] = cons.A2m(overall_values['-ref_pos-'])
stg2.update_ref_point(overall_values['-ref_pos-'])
# System Size Convergence Test
# First - initialize the the wave function to the updated locpot vector
# initiation of position, automatically or manually?
if overall_values['-dt-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.Text('If you do not have an interface, please choose to locate the initial wave-function manually', size=(100, 1))],
[sg.Text(
'Do you want it to search for a position automatically or manually supply an initial position?',
size=(150, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('automatically', size=(50, 1), key='-z0_auto-')],
[sg.Checkbox('manually', size=(40, 1), key='-z0_manual-')]])],
[sg.Text('Where do you want to save you plots?', size=(30, 1)), sg.Input(key='-dt_conv_save_path-'), sg.FileBrowse()],
[sg.Text(
'If you chose to calculate Transmission coefficient, do you wantt the detemine upper limit of simulation time for the integration?',
size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-final_time-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-dt_conv_save_path-'] = "/".join(list(overall_values['-dt_conv_save_path-'].split('/')[0:-1]))
# If we have an Interface - Please Locate it
if overall_values['-interface-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec=stg2.current_locpot_vec, to_plot=True, to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Locate Your Interface ',
size=(100, 1))],
[sg.Frame('Interface Position',
layout=[[sg.In(default_text=0, size=(20, 1),
key='-Interface_pos-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locating Your Interface Position ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-Interface_pos-'] = np.float64(overall_values['-Interface_pos-'])
overall_values['-Interface_pos-'] = cons.A2m(overall_values['-Interface_pos-'])
overall_values = convert_to_type(overall_values)
ind_interface,pos_interface = find_closest_value_in_array(overall_values['-Interface_pos-'],stg2.current_locpot_vec[:,0])
stg2.index_new_interface, stg2.new_interface = ind_interface, pos_interface
# If we chose automatic search for z0 centering - from what side?
if overall_values['-interface-'] and overall_values['-z0_auto-'] and not overall_values['-z0_manual-'] and \
(not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('What side of the interface do you want it to be initialized at ', size=(100, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('Left size', size=(40, 1), key='-z0_auto_left_init-')],
[sg.Checkbox('Right size', size=(40, 1), key='-z0_auto_right_init-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# if you chose to initialize the z0 manually - it would plot the locpot to enable the user to choose the initial
# position of the z0.
if overall_values['-z0_manual-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec =stg2.current_locpot_vec,to_plot=True,to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-manual_z0_val-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-manual_z0_val-'] = np.float64(overall_values['-manual_z0_val-'])
overall_values['-manual_z0_val-'] = cons.A2m(overall_values['-manual_z0_val-'])
overall_values = convert_to_type(overall_values)
# Handling the manual z0 Value
if overall_values['-z0_manual-']:
z0_temp = overall_values['-manual_z0_val-']
else:
if overall_values['-z0_auto_left_init-']:
side_z0_init = 'Left'
else:
side_z0_init = 'Right'
z0_temp_ind, z0_temp_pos = stg2.find_initial_position_to_center_psi0(init_side = side_z0_init, manual = False,manual_pos = None, index = False)
z0_temp = z0_temp_pos
psi0_dic['z0'] = cons.m2A( z0_temp)
# # If we would like to converge dt but we didnt converged system size before
# # In this case we have to initialize z0
# # How to initialize z0, auto or manually
# if not overall_values['-sys_size-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
# not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
# [sg.Text(
# 'Do you want it to search for a position automatically or manually supply an initial position?',
# size=(150, 1))],
# [sg.Frame('Initial position',
# layout=[[sg.Checkbox('automatically', size=(50, 1), key='-z0_auto-')],
# [sg.Checkbox('manually', size=(40, 1), key='-z0_manual-')]])],
# [sg.Text('Where do you want to save you plots?', size=(30, 1)),
# sg.Input(key='-dt_conv_save_path-'), sg.FileBrowse()],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
# overall_values['-dt_conv_save_path-'] = "/".join(list(overall_values['-dt_conv_save_path-'].split('/')[0:-1]))
#
# # If we have an Interface - Please Locate it
# if overall_values['-interface-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
# not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
# Locp.averaging_along_axis(locpot_vec=stg2.current_locpot_vec, to_plot=True, to_plot_cursor_choice=True)
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('Locate Your Interface ',
# size=(100, 1))],
# [sg.Frame('Interface Position',
# layout=[[sg.In(default_text=0, size=(20, 1),
# key='-Interface_pos-')]])],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Locating Your Interface Position ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
# overall_values['-Interface_pos-'] = np.float64(overall_values['-Interface_pos-'])
# overall_values['-Interface_pos-'] = cons.A2m(overall_values['-Interface_pos-'])
# overall_values = convert_to_type(overall_values)
# ind_interface,pos_interface = find_closest_value_in_array(overall_values['-Interface_pos-'],stg2.current_locpot_vec[:,0])
# stg2.index_new_interface, stg2.new_interface = ind_interface, pos_interface
#
# # If we chose automatic search for z0 centering - from what side?
# if overall_values['-interface-'] and overall_values['-z0_auto-'] and not overall_values['-z0_manual-'] and \
# (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
# not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('What side of the interface do you want it to be initialized at ', size=(100, 1))],
# [sg.Frame('Initial position',
# layout=[[sg.Checkbox('Left size', size=(40, 1), key='-z0_auto_left_init-')],
# [sg.Checkbox('Right size', size=(40, 1), key='-z0_auto_right_init-')]])],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
#
# # if you chose to initialize the z0 manually - it would plot the locpot to enable the user to choose the initial
# # position of the z0.
# if overall_values['-z0_manual-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
# not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
# Locp.averaging_along_axis(locpot_vec =stg2.current_locpot_vec,to_plot=True,to_plot_cursor_choice=True)
# layout_temp = [[sg.Menu(menu_def, tearoff=True)],
# [sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
# [sg.In(default_text=0, size=(20, 1), key='-manual_z0_val-')],
# [sg.Submit(), sg.Cancel()]]
# window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
# event_temp, values_temp = window_temp.read()
# window_temp.close()
# overall_values.update(values_temp)
# overall_values['-manual_z0_val-'] = np.float64(overall_values['-manual_z0_val-'])
# overall_values['-manual_z0_val-'] = cons.A2m(overall_values['-manual_z0_val-'])
# overall_values = convert_to_type(overall_values)
#
# # Handling the manual z0 Value
# if overall_values['-z0_manual-']:
# z0_temp = overall_values['-manual_z0_val-']
# else:
# if overall_values['-z0_auto_left_init-']:
# side_z0_init = 'Left'
# else:
# side_z0_init = 'Right'
# z0_temp_ind, z0_temp_pos = stg2.find_initial_position_to_center_psi0(init_side = side_z0_init, manual = False,manual_pos = None, index = False)
# z0_temp = z0_temp_pos
# psi0_dic['z0'] = cons.m2A( z0_temp)
if not overall_values['-ext_locpot-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if overall_values['-Range-']:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'],
dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=overall_values['-interface-'],
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
stg2.psi0 = stg2.initialize_psi0(manual_center=True, manual_z0=z0_temp, To_update=True,
manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=overall_values['-interface-'], To_plot=True,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
stg2.psi0 = stg2.initialize_psi0(manual_center=True, manual_z0=z0_temp, To_update=True,
manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
if overall_values['-z0_manual-']:
if overall_values['-dt_conv_save_path-'] is None or overall_values['-dt_conv_save_path-'] == '':
stg2.converge_time_step(manual_center = True,manual_z0 = overall_values['-manual_z0_val-'])
else:
stg2.converge_time_step(manual_center=True, manual_z0=overall_values['-manual_z0_val-'], path_to_save=overall_values['-dt_conv_save_path-'])
else:
if overall_values['-dt_conv_save_path-'] is None or overall_values['-dt_conv_save_path-'] == '':
stg2.converge_time_step()
else:
stg2.converge_time_step(path_to_save=overall_values['-dt_conv_save_path-'])
elif overall_values['-dt-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
stg2.psi0 = stg2.initialize_psi0(manual_center=True, manual_z0=z0_temp, To_update=True,
manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
if overall_values['-dt_conv_save_path-'] is None or overall_values['-dt_conv_save_path-'] == '':
stg2.converge_time_step()
else:
stg2.converge_time_step(path_to_save=overall_values['-dt_conv_save_path-'])
# Handling the dt convergence test:
# -------------------------------------------------------------
# -------------------------------------------------------------
iteration = 1
while True:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Do you satisfy with the convergence results? Please answer [y/n]', size=(60, 1))],
[sg.Yes(), sg.No(), sg.Cancel()]]
window_temp = sg.Window('Time step convergence check ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
if event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel':
break
elif event_temp == 'Yes':
sg.popup_ok('Press Ok the continue')
break
elif event_temp == 'No':
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('How do you want to procceed?', size=(60, 1))],
[sg.Frame('Options',
layout=[[sg.Checkbox('Elongate the system', size=(15, 1),
key='-sys_size_elongate_system-')],
[sg.Text(
'From what side, please write exactly [Right/Left]. Only when you have an interface',
size=(50, 1)),
sg.In(key='-sys_size_elongate_side-', size=(10, 1))],
[sg.Text(
'If you selected to elonagte your system, please supply the position you want to insert the additional locpot'),
sg.In(key='-sys_size_elongate_position-', size=(10, 1))],
[sg.Text('And how many times'),
sg.In(default_text=10, key='-sys_size_elongate_multi-',
size=(20, 1))],
[sg.Text('What would you like to insert')],
[sg.Checkbox('Bulk-Like Locpot',
key='-sys_size_elongate_from_itself-')],
[sg.Text("")],
[sg.Text("Or you can choose other options:")],
[sg.Checkbox('Decreasing initial dt', size=(20, 1),
key='-sys_size_decr_dt-')],
[sg.Text(
'If selected, give the value you wish in seconds. Scale of Fsec',
size=(50, 1)),
sg.In(key='-sys_size_dec_dt_value-', size=(10, 1))],
[sg.Checkbox(
'Increasing interations. The initial maximal number of iteration was 15',
size=(50, 1),
key='-sys_size_incr_iterations-')],
[sg.Text('If selected, give the value of iterations you want',
size=(50, 1)),
sg.In(key='-sys_size_incr_iterations_value-', size=(10, 1))]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Time Step convergence check ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
if overall_values['-sys_size_elongate_system-']:
if overall_values['-interface-']:
stg2.elongate_interface_potential(from_iteslf=overall_values['-sys_size_elongate_from_itself-'],
side_from_itself=overall_values['-sys_size_elongate_side-'],
manual=not overall_values[
'-sys_size_elongate_from_external-'],
multi_manual=overall_values['-sys_size_elongate_multi-'],
pos_to_insert=overall_values['-sys_size_elongate_position-'],
locpot_vector=None, To_update=True)
if overall_values['-dt_conv_save_path-'] is None or overall_values[
'-dt_conv_save_path-'] == '':
stg2.converge_time_step()
else:
stg2.converge_time_step(path_to_save = "/".join(list(os.path.join(overall_values['-dt_conv_save_path-'], str(iteration)).split("\\"))))
else:
stg2.elongate_interface_potential(from_iteslf=overall_values['-sys_size_elongate_from_itself-'],
manual=overall_values['-sys_size_elongate_from_itself-'],
multi_manual=overall_values['-sys_size_elongate_multi-'],
pos_to_insert=overall_values['-sys_size_elongate_position-'],
locpot_vector=None, To_update=True)
if overall_values['-dt_conv_save_path-'] is None or overall_values[
'-dt_conv_save_path-'] == '':
stg2.converge_time_step()
else:
stg2.converge_time_step(
path_to_save="/".join(list(os.path.join(overall_values['-dt_conv_save_path-'], str(iteration)).split("\\"))))
if overall_values['-sys_size_decr_dt-']:
overall_values['-sys_size_dec_dt_value-'] = np.float64(overall_values['-sys_size_dec_dt_value-'])
stg2.dt = cons.fs2sec(overall_values['-sys_size_dec_dt_value-'])
if overall_values['-sys_size_incr_iterations-']:
overall_values['-sys_size_incr_iterations_value-'] = np.float64(
overall_values['-sys_size_incr_iterations_value-'])
if overall_values['-dt_conv_save_path-'] is None or overall_values[
'-dt_conv_save_path-'] == '':
stg2.converge_time_step(iterations=overall_values['-sys_size_incr_iterations_value-'])
else:
stg2.converge_time_step(iterations=overall_values['-sys_size_incr_iterations_value-'],path_to_save="/".join(list(os.path.join(overall_values['-dt_conv_save_path-'], str(iteration)).split("\\"))))
else:
if overall_values['-dt_conv_save_path-'] is None or overall_values[
'-dt_conv_save_path-'] == '':
stg2.converge_time_step()
else:
stg2.converge_time_step(
path_to_save="/".join(list(os.path.join(overall_values['-dt_conv_save_path-'], str(iteration)).split("\\"))))
itertion =+1
if (overall_values['-sys_size-']) and not (overall_values['-dt-']) and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.Text(
'Do you want it to search for a position automatically or manually supply an initial position?',
size=(150, 1))],
[sg.Text(
'If you do not have an interface, please choose to locate the initial wave-function manually',
size=(100, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('automatically', size=(50, 1), key='-z0_auto-')],
[sg.Checkbox('manually', size=(40, 1), key='-z0_manual-')]])],
[sg.Text('Where do you want to save you plots?', size=(30, 1)), sg.Input(key='-sys_size_save_path-'), sg.FileBrowse()],
[sg.Text(
'If you chose to calculate Transmission coefficient, do you wantt the detemine upper limit of simulation time for the integration?',
size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-final_time-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-sys_size_save_path-'] = "/".join(list(overall_values['-sys_size_save_path-'].split('/')[0:-1]))
# If we have an Interface - Please Locate it
if overall_values['-interface-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec=stg2.current_locpot_vec, to_plot=True, to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Locate Your Interface ',
size=(100, 1))],
[sg.Frame('Interface Position',
layout=[[sg.In(default_text=0, size=(20, 1),
key='-Interface_pos-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locating Your Interface Position ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-Interface_pos-'] = np.float64(overall_values['-Interface_pos-'])
overall_values['-Interface_pos-'] = cons.A2m(overall_values['-Interface_pos-'])
overall_values = convert_to_type(overall_values)
ind_interface,pos_interface = find_closest_value_in_array(overall_values['-Interface_pos-'],stg2.current_locpot_vec[:,0])
stg2.index_new_interface, stg2.new_interface = ind_interface, pos_interface
# If we chose automatic search for z0 centering - from what side?
if overall_values['-interface-'] and overall_values['-z0_auto-'] and not overall_values['-z0_manual-'] and \
(not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('What side of the interface do you want it to be initialized at ', size=(100, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('Left size', size=(40, 1), key='-z0_auto_left_init-')],
[sg.Checkbox('Right size', size=(40, 1), key='-z0_auto_right_init-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# if you chose to initialize the z0 manually - it would plot the locpot to enable the user to choose the initial
# position of the z0.
if overall_values['-z0_manual-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec =stg2.current_locpot_vec,to_plot=True,to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-manual_z0_val-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-manual_z0_val-'] = np.float64(overall_values['-manual_z0_val-'])
overall_values['-manual_z0_val-'] = cons.A2m(overall_values['-manual_z0_val-'])
overall_values = convert_to_type(overall_values)
# Handling the manual z0 Value
if overall_values['-z0_manual-']:
z0_temp = overall_values['-manual_z0_val-']
else:
if overall_values['-z0_auto_left_init-']:
side_z0_init = 'Left'
else:
side_z0_init = 'Right'
z0_temp_ind, z0_temp_pos = stg2.find_initial_position_to_center_psi0(init_side = side_z0_init, manual = False,manual_pos = None, index = False)
z0_temp = z0_temp_pos
psi0_dic['z0'] = cons.m2A( z0_temp)
# If we already did system time step test and the pop-up window of initializtion already apeared.
# This is just to let the user choose where to save his figures.
elif overall_values['-sys_size-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plots', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-sys_size_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-sys_size_save_path-'] = "/".join(
list(overall_values['-sys_size_save_path-'].split('/')[0:-1]))
if overall_values['-sys_size-'] and not (overall_values['-dt-'] or overall_values['-ext_locpot-']) and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if overall_values['-Range-']:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'],
dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=overall_values['-interface-'],
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
stg2.psi0 = stg2.initialize_psi0(manual_center = True,manual_z0 =z0_temp,To_update = True, manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=overall_values['-interface-'], To_plot=True,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
stg2.psi0 = stg2.initialize_psi0(manual_center = True,manual_z0 =z0_temp,To_update = True, manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
if overall_values['-z0_manual-']:
if not overall_values['-sys_size_save_path-'] is None or not overall_values['-sys_size_save_path-'] == '':
stg2.converge_system_size(manual_center = True,manual_z0 = overall_values['-manual_z0_val-'],path_to_save=overall_values['-sys_size_save_path-'])
else:
stg2.converge_system_size(manual_center=True, manual_z0=overall_values['-manual_z0_val-'])
else:
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(path_to_save=overall_values['-sys_size_save_path-'])
else:
stg2.converge_system_size()
elif overall_values['-sys_size-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
stg2.psi0 = stg2.initialize_psi0(manual_center=True, manual_z0=z0_temp, To_update=True,
manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:, 0]), stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:, 0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:, 0],
stg2.psi0, units='Meter')
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(path_to_save=overall_values['-sys_size_save_path-'])
else:
stg2.converge_system_size()
# Handling system size convergence
# ------------------------------------------------------
# ------------------------------------------------------
iteration = 1
while True:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Do you satisfy with the convergence results? Please answer [y/n]', size=(60, 1))],
[sg.Yes(), sg.No(), sg.Cancel()]]
window_temp = sg.Window('System size convergence check ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
if event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel':
break
elif event_temp == 'Yes':
sg.popup_ok('Press Ok the continue')
break
elif event_temp == 'No':
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('How do you want to procceed?', size=(60, 1))],
[sg.Frame('Options',
layout=[[sg.Checkbox('Elongate the system', size=(15, 1),
key='-sys_size_elongate_system-')],
[sg.Text(
'From what side, please write exactly [Right/Left]. Only when you have an interface',
size=(50, 1)), sg.In(key='-sys_size_elongate_side-',size=(10,1))],
[sg.Text(
'If you selected to elonagte your system, please supply the position you want to insert the additional locpot'),
sg.In(key='-sys_size_elongate_position-',size=(10,1))],
[sg.Text('And how many times'),
sg.In(default_text=10, key='-sys_size_elongate_multi-',size=(20,1))],
[sg.Text('What would you like to insert')],
[sg.Checkbox('Bulk-Like Locpot',
key='-sys_size_elongate_from_itself-')],
[sg.Text("")],
[sg.Text("Or you can choose other options:")],
[sg.Checkbox('Decreasing initial dt', size=(20, 1),
key='-sys_size_decr_dt-')],
[sg.Text(
'If selected, give the value you wish in seconds. Scale of Fsec',
size=(50, 1)),
sg.In(key='-sys_size_dec_dt_value-',size=(10,1))],
[sg.Checkbox(
'Increasing interations. The initial maximal number of iteration was 15',
size=(50, 1),
key='-sys_size_incr_iterations-')],
[sg.Text('If selected, give the value of iterations you want',
size=(50, 1)),
sg.In(key='-sys_size_incr_iterations_value-',size=(10,1))]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('System size convergence check ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
if overall_values['-sys_size_elongate_system-']:
if overall_values['-interface-']:
stg2.elongate_interface_potential(from_iteslf=overall_values['-sys_size_elongate_from_itself-'],
side_from_itself=overall_values['-sys_size_elongate_side-'],
manual=True, multi_manual=overall_values['-sys_size_elongate_multi-'],
pos_to_insert=overall_values['-sys_size_elongate_position-'],
locpot_vector=None, To_update=True)
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(path_to_save="/".join(list(os.path.join(overall_values['-sys_size_save_path-'], str(iteration)).split("\\"))))
else:
stg2.converge_system_size()
else:
stg2.elongate_interface_potential(from_iteslf=overall_values['-sys_size_elongate_from_itself-'],
manual=True, multi_manual=overall_values['-sys_size_elongate_multi-'],
pos_to_insert=overall_values['-sys_size_elongate_position-'],
locpot_vector=None, To_update=True)
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(path_to_save="/".join(list(os.path.join(overall_values['-sys_size_save_path-'], str(iteration)).split("\\"))))
else:
stg2.converge_system_size()
if overall_values['-sys_size_decr_dt-']:
overall_values['-sys_size_dec_dt_value-'] = np.float64(overall_values['-sys_size_dec_dt_value-'])
stg2.dt = cons.fs2sec(overall_values['-sys_size_dec_dt_value-'])
if overall_values['-sys_size_incr_iterations-']:
overall_values['-sys_size_incr_iterations_value-'] = np.float64(overall_values['-sys_size_incr_iterations_value-'])
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(iteration_num=overall_values['-sys_size_incr_iterations_value-'],path_to_save="/".join(list(os.path.join(overall_values['-sys_size_save_path-'], str(iteration)).split("\\"))))
else:
stg2.converge_system_size(iteration_num=overall_values['-sys_size_incr_iterations_value-'])
else:
if not overall_values['-sys_size_save_path-'] is None or not overall_values[
'-sys_size_save_path-'] == '':
stg2.converge_system_size(path_to_save="/".join(list(os.path.join(overall_values['-sys_size_save_path-'], str(iteration)).split("\\"))))
else:
stg2.converge_system_size()
iteration +=1
# ------------------------------------------------------
# ------------------------------------------------------
# Handling Case when dt convergence test is desired
# dt convergence test
# -------------------------------------------------------------
# -------------------------------------------------------------
if overall_values['-Pr_avg_locpot-'] and (overall_values['-ext_locpot-'] or overall_values['-sys_size-']) and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
fig, axs = plt.subplots(1, 1)
fig.add_subplot(111, frameon=False)
stg2.get_most_relevant_z_coordinate_vec()
axs.plot(stg2.current_locpot_vec[:,0],stg2.current_locpot_vec[:,1], label='Local Potential')
axs.grid()
axis_dic = {0: 'X', 1: 'Y', 2: 'Z'}
plt.tick_params(labelcolor='none', which='both', top=False, bottom=False, left=False, right=False)
plt.xlabel('{} axis in Angstrum'.format(axis_dic[axis]))
plt.ylabel('Electrostatic potential in eV, V({})'.format(axis_dic[axis]))
fig.legend(labelspacing=3, fontsize='large', handletextpad=3, loc='lower right')
fig.tight_layout()
fig.show()
fig.savefig('1D potential along axis {}'.format(axis_dic[axis]))
elif overall_values['-Pr_avg_locpot-'] and not (overall_values['-ext_locpot-'] or overall_values['-sys_size-']) and overall_values['-density-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
fig, axs = plt.subplots(1, 1)
fig.add_subplot(111, frameon=False)
axs.plot(zz_convg, vv_convg, label='Local Potential')
axs.grid()
axis_dic = {0: 'X', 1: 'Y', 2: 'Z'}
plt.tick_params(labelcolor='none', which='both', top=False, bottom=False, left=False, right=False)
plt.xlabel('{} axis in Angstrum'.format(axis_dic[axis]))
plt.ylabel('Electrostatic potential in eV, V({})'.format(axis_dic[axis]))
fig.legend(labelspacing=3, fontsize='large', handletextpad=3, loc='lower right')
fig.tight_layout()
fig.show()
fig.savefig('1D potential along axis {}'.format(axis_dic[axis]))
elif overall_values['-Pr_avg_locpot-'] and not overall_values['-ext_locpot-'] and not overall_values['-density-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(to_plot=True)
# Handling the rest of the options:
# Full propagation
# Cumulative Probabilty
# Transmission Coefficient
# Initializing Stage_2 If it was not initialized till here.
try:
stg2
except NameError:
if overall_values['-Range-']:
try:
if not (overall_values['-ref_pos-'] is None or overall_values['-ref_pos-'] == 0):
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'],
dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=overall_values['-interface-'],
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']],ref_point = overall_values['-ref_pos-'])
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'],
dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=overall_values['-interface-'],
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
except KeyError:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Nt=overall_values['-Nt-'],
dt=overall_values['-initial_dt-'],
To_plot=True, Has_interface=overall_values['-interface-'],
limits_for_itself=[overall_values['-Initi_pos-'], overall_values['-Final_pos-']])
else:
try:
if not (overall_values['-ref_pos-'] is None or overall_values['-ref_pos-'] == 0):
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=overall_values['-interface-'], To_plot=True,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'],ref_point = overall_values['-ref_pos-'] )
else:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=overall_values['-interface-'], To_plot=True,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
except KeyError:
stg2 = Stage_2(Locp, grid_density, psi0_dic, Has_interface=overall_values['-interface-'],
To_plot=True,
Nt=overall_values['-Nt-'], dt=overall_values['-initial_dt-'])
# initiation of position, automatically or manually?
if (overall_values['-Full_prop-'] or overall_values['-Trans_coeff-'] or overall_values['-cum_prob-'] ) and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')) and not (overall_values['-dt-'] or overall_values['-sys_size-']):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.Text(
'Do you want it to search for a position automatically or manually supply an initial position?',
size=(150, 1))],
[sg.Text(
'If you do not have an interface, please choose to initialize the wave-function manually',
size=(150, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('automatically', size=(50, 1), key='-z0_auto-')],
[sg.Checkbox('manually', size=(40, 1), key='-z0_manual-')]])],
[sg.Text('If you chose to calculate Transmission coefficient, do you wantt the detemine upper limit of simulation time for the integration?', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1),key='-final_time-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# If we have an Interface - Please Locate it
if overall_values['-interface-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec=stg2.current_locpot_vec, to_plot=True, to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Locate Your Interface ',
size=(100, 1))],
[sg.Frame('Interface Position',
layout=[[sg.In(default_text=0, size=(20, 1),
key='-Interface_pos-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Locating Your Interface Position ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-Interface_pos-'] = np.float64(overall_values['-Interface_pos-'])
overall_values['-Interface_pos-'] = cons.A2m(overall_values['-Interface_pos-'])
overall_values = convert_to_type(overall_values)
ind_interface,pos_interface = find_closest_value_in_array(overall_values['-Interface_pos-'],stg2.current_locpot_vec[:,0])
stg2.index_new_interface, stg2.new_interface = ind_interface, pos_interface
# If we chose automatic search for z0 centering - from what side?
if overall_values['-interface-'] and overall_values['-z0_auto-'] and not overall_values['-z0_manual-'] and \
(not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('What side of the interface do you want it to be initialized at ', size=(100, 1))],
[sg.Frame('Initial position',
layout=[[sg.Checkbox('Left size', size=(40, 1), key='-z0_auto_left_init-')],
[sg.Checkbox('Right size', size=(40, 1), key='-z0_auto_right_init-')]])],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
# if you chose to initialize the z0 manually - it would plot the locpot to enable the user to choose the initial
# position of the z0.
if overall_values['-z0_manual-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
Locp.averaging_along_axis(locpot_vec =stg2.current_locpot_vec,to_plot=True,to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to initialize you wave function', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-manual_z0_val-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Initiation position of the wave-function ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-manual_z0_val-'] = np.float64(overall_values['-manual_z0_val-'])
overall_values['-manual_z0_val-'] = cons.A2m(overall_values['-manual_z0_val-'])
overall_values = convert_to_type(overall_values)
if overall_values['-z0_manual-']:
z0_temp = overall_values['-manual_z0_val-']
else:
if overall_values['-z0_auto_left_init-']:
side_z0_init = 'Left'
else:
side_z0_init = 'Right'
z0_temp_ind, z0_temp_pos = stg2.find_initial_position_to_center_psi0(init_side = side_z0_init, manual = False,manual_pos = None, index = False)
z0_temp = z0_temp_pos
stg2.psi0 = stg2.initialize_psi0(manual_center = True,manual_z0 = z0_temp, To_update = True, manual_psi_dic=psi0_dic)
if not is_normalized(cons.A2m(stg2.current_locpot_vec[:,0]),stg2.psi0):
print('Your initial Wave-function is Not normalized')
print(np.real(np.trapz(stg2.psi0 * np.conj(stg2.psi0), stg2.current_locpot_vec[:,0])))
stg2.psi0 = stg2.psi0 * normalize_wave_function_numerically(stg2.current_locpot_vec[:,0], stg2.psi0, units='Meter')
path_to_save = ''
if overall_values['-Full_prop-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
try:
results_full_prop = stg2.propagate_psi(path_to_save=overall_values['-sys_size_save_path-'])
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_full_prop = stg2.propagate_psi(path_to_save=overall_values['-dt_conv_save_path-'])
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your Animation?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-ani_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-ani_save_path-'] = "/".join(list(overall_values['-ani_save_path-'].split('/')[0:-1]))
results_full_prop = stg2.propagate_psi(path_to_save=overall_values['-ani_save_path-'])
path_to_save = overall_values['-ani_save_path-']
if overall_values['-Trans_coeff-'] and (not(event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not(event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
z = stg2.current_locpot_vec[:, 0]
z = cons.A2m(z)
kk = to_1D_vec(create_k_grid(len(z), z[-1] - z[0]))
kk = to_1D_vec(kk)
try:
if not (overall_values['-final_time-'] == 0 or overall_values['-final_time-'] == '0' or overall_values['-final_time-'] is None):
final_time = np.float64(overall_values['-final_time-'])
else:
final_time = 0
except KeyError:
final_time = 0
if overall_values['-Range-'] or not overall_values['-interface-']:
try:
results_Trans = transmision_coeff(stg2.psi0,stg2.Nt,stg2.dt,stg2.current_locpot_vec[:,1],stg2.current_locpot_vec[:,0],kk,overall_values['-ref_pos-'],path_to_save=overall_values['-sys_size_save_path-'],final_time=final_time)
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt, stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, overall_values['-ref_pos-'],
path_to_save=overall_values['-dt_conv_save_path-'],final_time=final_time)
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
try:
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt,
stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk,
overall_values['-ref_pos-'],
path_to_save=overall_values['-ani_save_path-'],final_time=final_time)
path_to_save = overall_values['-ani_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plot?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-trans_coe_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-trans_coe_save_path-'] = "/".join(
list(overall_values['-trans_coe_save_path-'].split('/')[0:-1]))
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt, stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, overall_values['-ref_pos-'],
path_to_save=overall_values['-trans_coe_save_path-'],final_time=final_time)
path_to_save = overall_values['-trans_coe_save_path-']
else:
try:
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt, stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, stg2.new_interface,path_to_save=overall_values['-sys_size_save_path-'],final_time = final_time)
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt, stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, stg2.new_interface,
path_to_save=overall_values['-dt_conv_save_path-'],final_time = final_time)
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
try:
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt,
stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, stg2.new_interface,
path_to_save=overall_values['-ani_save_path-'],final_time = final_time)
path_to_save = overall_values['-ani_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plot?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-trans_coe_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-trans_coe_save_path-'] = "/".join(
list(overall_values['-trans_coe_save_path-'].split('/')[0:-1]))
results_Trans = transmision_coeff(stg2.psi0, stg2.Nt, stg2.dt, stg2.current_locpot_vec[:, 1],
stg2.current_locpot_vec[:, 0], kk, stg2.new_interface,
path_to_save=overall_values['-trans_coe_save_path-'],final_time = final_time)
path_to_save = overall_values['-trans_coe_save_path-']
if overall_values['-cum_prob-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if overall_values['-Range-']:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],path_to_save=overall_values['-sys_size_save_path-'])
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'], path_to_save=overall_values['-dt_conv_save_path-'])
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],
path_to_save=overall_values['-ani_save_path-'])
path_to_save = overall_values['-ani_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],
path_to_save=overall_values['-trans_coe_save_path-'])
path_to_save = overall_values['-trans_coe_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plot?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-cum_prob_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-cum_prob_save_path-'] = "/".join(
list(overall_values['-cum_prob_save_path-'].split('/')[0:-1]))
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'], path_to_save=overall_values['-cum_prob_save_path-'])
path_to_save = overall_values['-cum_prob_save_path-']
elif overall_values['-interface-']:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(path_to_save=overall_values['-sys_size_save_path-'])
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(path_to_save=overall_values['-dt_conv_save_path-'])
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
path_to_save=overall_values['-ani_save_path-'])
path_to_save = overall_values['-ani_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
path_to_save=overall_values['-trans_coe_save_path-'])
path_to_save = overall_values['-trans_coe_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plot?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-cum_prob_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-cum_prob_save_path-'] = "/".join(
list(overall_values['-cum_prob_save_path-'].split('/')[0:-1]))
results_cum_prob = stg2.cumulative_probabilty_through_interface(path_to_save=overall_values['-cum_prob_save_path-'])
path_to_save = overall_values['-cum_prob_save_path-']
else:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],path_to_save=overall_values['-sys_size_save_path-'])
path_to_save = overall_values['-sys_size_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'], path_to_save=overall_values['-dt_conv_save_path-'])
path_to_save = overall_values['-dt_conv_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],
path_to_save=overall_values['-ani_save_path-'])
path_to_save = overall_values['-ani_save_path-']
except KeyError:
try:
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'],
path_to_save=overall_values['-trans_coe_save_path-'])
path_to_save = overall_values['-trans_coe_save_path-']
except KeyError:
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save your plot?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-cum_prob_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-cum_prob_save_path-'] = "/".join(
list(overall_values['-cum_prob_save_path-'].split('/')[0:-1]))
results_cum_prob = stg2.cumulative_probabilty_through_interface(
check_pos=overall_values['-ref_pos-'], path_to_save=overall_values['-cum_prob_save_path-'])
path_to_save = overall_values['-cum_prob_save_path-']
try:
if overall_values['-modeling_interface-'] and (not (event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel') or \
not (event_temp == sg.WIN_CLOSED or event_temp == 'Exit' or event_temp == 'Cancel')):
if path_to_save == '' :
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Where do you want to save interface modeling?', size=(100, 1))],
[sg.Text(
'Please browse the desired location. Enter the directory and choose any random file just to get the path',
size=(100, 1)),
sg.Input(key='-interface_model_save_path-'), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Where do you want to save your interface model plots', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-interface_model_save_path-'] = "/".join(
list(overall_values['-interface_model_save_path-'].split('/')[0:-1]))
path_to_save = overall_values['-interface_model_save_path-']
Locp.averaging_along_axis(to_plot=True, to_plot_atoms=True)
Locp.averaging_along_axis(locpot_vec =stg2.current_locpot_vec,to_plot=True, to_plot_cursor_choice=True)
layout_temp = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Please indicate where your interface starts and ends', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-interface_start_position-')],
[sg.In(default_text=0, size=(20, 1), key='-interface_end_position-')],
[sg.Text('Please indicate where the region to be plotted', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-region_start_position-')],
[sg.In(default_text=0, size=(20, 1), key='-region_end_position-')],
[sg.Text('Please indicate what minima you want to treat as Delta', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-Delta_pos-')],
[sg.Text('Please indicate Where is the interface position', size=(100, 1))],
[sg.In(default_text=0, size=(20, 1), key='-Interface_position_model-')],
# [sg.Text('Please indicate what is the next minima you want to refer as the width - sigma', size=(100, 1))],
# [sg.In(default_text=0, size=(20, 1), key='-sigma_pos-')],
[sg.Submit(), sg.Cancel()]]
window_temp = sg.Window('Modelling the interface - positions selection ', layout_temp)
event_temp, values_temp = window_temp.read()
window_temp.close()
overall_values.update(values_temp)
overall_values['-interface_start_position-'] = np.float64(overall_values['-interface_start_position-'])
overall_values['-interface_start_position-'] = cons.A2m(overall_values['-interface_start_position-'])
overall_values['-interface_end_position-'] = np.float64(overall_values['-interface_end_position-'])
overall_values['-interface_end_position-'] = cons.A2m(overall_values['-interface_end_position-'])
overall_values['-region_start_position-'] = np.float64(overall_values['-region_start_position-'])
overall_values['-region_start_position-'] = cons.A2m(overall_values['-region_start_position-'])
overall_values['-region_end_position-'] = np.float64(overall_values['-region_end_position-'])
overall_values['-region_end_position-'] = cons.A2m(overall_values['-region_end_position-'])
overall_values['-Delta_pos-'] = np.float64(overall_values['-Delta_pos-'])
overall_values['-Delta_pos-'] = cons.A2m(overall_values['-Delta_pos-'])
overall_values['-Interface_position_model-'] = np.float64(overall_values['-Interface_position_model-'])
overall_values['-Interface_position_model-'] = cons.A2m(overall_values['-Interface_position_model-'])
# overall_values['-sigma_pos-'] = np.float64(overall_values['-sigma_pos-'])
# overall_values['-sigma_pos-'] = cons.A2m(overall_values['-sigma_pos-'])
overall_values = convert_to_type(overall_values)
results_interface_model = stg2.model_interface(overall_values['-interface_start_position-'], overall_values['-interface_end_position-'],overall_values['-region_start_position-'],overall_values['-region_end_position-']
,overall_values['-Delta_pos-'], z_in = stg2.locp.locpot_vec[:,0], v_in = stg2.locp.locpot_vec[:,1],interface_pos = overall_values['-Interface_position_model-'],path_to_save = overall_values['-interface_model_save_path-'])
except KeyError:
pass