Skip to content

Commit

Permalink
remove parallelization over points in test script; add crosstest for …
Browse files Browse the repository at this point in the history
…user defined field
  • Loading branch information
sea23537 committed Jan 31, 2025
1 parent f711a3d commit e290a8c
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 47 deletions.
16 changes: 8 additions & 8 deletions cued/utility/params_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def __combine_parameters(self, UP):

# build dictionary of all parameters, exclude t_pdf_densmat, points_to_path and parameters of Gabor transformation
excl_set = {'__weakref__', '__doc__', '__dict__', '__module__',"t_pdf_densmat","parallelize_over_points",'gabor_gaussian_center','gabor_window_width'}

self.user_params = sorted(UP.__dict__.keys() - excl_set)
self.t_pdf_densmat = np.array([-100, 0, 50, 100])*CoFa.fs_to_au # Time points for printing density matrix
if hasattr(UP, 'parallelize_over_points'):
Expand All @@ -35,8 +35,8 @@ def __combine_parameters(self, UP):
self.gabor_gaussian_center = np.array(UP.gabor_gaussian_center)*CoFa.fs_to_au
if hasattr(UP,'gabor_window_width'):
self.gabor_window_width = np.array(UP.gabor_window_width)*CoFa.fs_to_au


# build list of parameter lists
self.number_of_combinations = 1
self.params_lists = []
Expand Down Expand Up @@ -178,13 +178,13 @@ def __optional(self, UP):
self.E0_ort = 0
if 'chirp_ort' in UP:
self.chirp_ort = UP['chirp_ort']*CoFa.THz_to_au # Pulse chirp frequency
else:
else:
self.chirp_ort = 0
if 'sigma_ort' in UP:
self.sigma_ort = UP['sigma_ort']*CoFa.fs_to_au # Gaussian pulse width
else:
else:
self.sigma_ort = 1
if 'phase_ort' in UP:
if 'phase_ort' in UP:
self.phase_ort = UP['phase_ort'] # Carrier-envelope phase
else:
self.phase_ort = 0
Expand Down Expand Up @@ -277,7 +277,7 @@ def __optional(self, UP):
if 'first_order' in UP:
self.first_order = UP['first_order']

self.second_order = False
self.second_order = False
if 'second_order' in UP:
self.second_order = UP['second_order']

Expand Down Expand Up @@ -354,7 +354,7 @@ def __optional(self, UP):
self.do_fock = False
if 'do_fock' in UP:
self.do_fock = UP['do_fock']

if self.do_fock == True: # split_paths = True and parallelize_over_points = False as default for Fock calculations
if not 'split_paths' in UP:
self.split_paths = True
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,3 @@ class params:
save_anom = True
user_out = False
save_latex_pdf = False
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
parallelize_over_points = True
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ class params:
solver = '2band'
fourier_window_function = 'hann'
user_out = False
save_latex_pdf = True
save_latex_pdf = False
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def run(system):
E0 = 1e-1 # MV/cm
sigma = 20 # fs
params.electric_field_function_in_path = make_gaussian(E0, sigma)
params.electric_field_function_ortho = make_gaussian(0, sigma)
params.electric_field_function_ortho = make_gaussian(0, sigma) # orthogonal field is zero
sbe_solver(system, params)


Expand Down
Binary file not shown.
40 changes: 40 additions & 0 deletions tests/36_crosstest_user_defined_E_field_against_test_03/params.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Input parameters for SBE.py
import numpy as np


class params:
# System parameters
#########################################################################
e_fermi = 0.0 # Fermi energy in eV
temperature = 0.0 # Temperature in eV

# Model Hamiltonian parameters
# Brillouin zone parameters
##########################################################################
BZ_type = 'rectangle' # rectangle or hexagon
Nk1 = 50 # Number of kpoints in each of the paths
Nk2 = 4 # Number of paths
length_BZ_E_dir = 5.0 # length of BZ in E-field direction
length_BZ_ortho = 0.2 # length of BZ orthogonal to E-field direction
angle_inc_E_field = 0 # incoming angle of the E-field in degree
dk_order = 8 # order for numerical derivative of density matrix

# Driving field parameters
##########################################################################
f = 25.0 # Pulse frequency (THz)

# Time scales (all units in femtoseconds)
##########################################################################
T1 = 1000 # Phenomenological diagonal damping time
T2 = 1 # Phenomenological polarization damping time
t0 = -1000 # Start time *pulse centered @ t=0, use t0 << 0
dt = 0.05 # Time step

# Flags for testing and features
##########################################################################
gauge = 'length' # Gauge of the system
solver = '2band'
fourier_window_function = 'gaussian'
gaussian_window_width = 50
user_out = False
save_latex_pdf = False
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from params import params

from numba import njit
import numpy as np
import cued.hamiltonian
from cued.main import sbe_solver
from cued.utility import ConversionFactors as CoFa

def make_electric_field_in_path(E0, f, sigma, chirp, phase):
"""
Creates a jitted version of the electric field for fast use inside a solver
"""
@njit
def electric_field(t):
'''
Returns the instantaneous driving pulse field
'''
# Non-pulse
# return E0*np.sin(2.0*np.pi*w*t)
# Chirped Gaussian pulse
return E0*np.exp(-t**2/sigma**2) \
* np.sin(2.0*np.pi*f*t*(1 + chirp*t) + phase)

return electric_field


def dirac():
A = 0.1974 # Fermi velocity

dirac_system = cued.hamiltonian.BiTe(C0=0, C2=0, A=A, R=0, mz=0)

return dirac_system

def run(system):

E0 = 5.00*CoFa.MVpcm_to_au # Pulse amplitude (MV/cm)
f = 25.0*CoFa.THz_to_au # Pulse frequency (THz)
chirp = 0.00 # Pulse chirp ratio (chirp = c/w) (THz)
sigma = 50.0*CoFa.fs_to_au # Gaussian pulse width (femtoseconds)
phase = 0.0

params.electric_field_function_in_path = make_electric_field_in_path(E0, f, sigma, chirp, phase)
params.electric_field_function_ortho = make_electric_field_in_path(0, f, sigma, chirp, phase) # orthogonal field is zero

sbe_solver(system, params)

return 0

if __name__ == "__main__":
run(dirac())
25 changes: 1 addition & 24 deletions tests/test_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,30 +210,7 @@ def import_params(filename_params):
if hasattr(params, 'MPI_NUM_PROCS'):
current_mpi_num_procs = params.MPI_NUM_PROCS
else:
if params.params().gauge == "velocity":
if hasattr(params, 'split_paths'):
if params.params().split_paths != True:
num_ranks = params.params().Nk1 * params.params().Nk2
os.system("echo ' parallelize_over_points = True' >> "+filename_params)
else:
num_ranks = params.params().Nk2
elif hasattr(params, 'do_fock'):
if params.params().do_fock != True:
num_ranks = params.params().Nk1 * params.params().Nk2
os.system("echo ' parallelize_over_points = True' >> "+filename_params)
else:
num_ranks = params.params().Nk2
else:
num_ranks = params.params().Nk1 * params.params().Nk2
os.system("echo ' parallelize_over_points = True' >> "+filename_params)
else:
num_ranks = params.params().Nk2

if num_ranks < default_mpi_jobs:
current_mpi_num_procs = num_ranks
else:
current_mpi_num_procs = default_mpi_jobs
print(f"MG - Debug: Used {current_mpi_num_procs} ranks for {filename_params}")
current_mpi_num_procs = default_mpi_jobs
if hasattr(params, 'NUM_TESTED_ORDERS'):
current_tested_orders = params.NUM_TESTED_ORDERS
else:
Expand Down

0 comments on commit e290a8c

Please sign in to comment.