Source code for EPWpy.utilities.set_files
import numpy as np
import os
from EPWpy.utilities.write_job import write_job
from EPWpy.default import set_default as sd
[docs]
class SetDir(write_job):
"""
Class to manage directory structure and file writing for simulations.
This class handles creation of working directories and sets up a writer
object for job management. It acts as a base class for higher-level
simulation interfaces (QE, EPW, Abinit, BGW).
Attributes
----------
data : any
User-provided input data, typically a dictionary containing calculation parameters.
home : str
Current working directory at the time of initialization.
home_real : str
Same as `home`; stores the original working directory for reference.
sd : SetDefaultVals
Internal object for default values and writer creation.
writer : object
Writer object (created from `SetDefaultVals`) used to write input files or scripts.
"""
def __init__(self, data):
"""
Initialize directory manager.
Sets the home directory, stores input data, and creates a writer
object for managing input file generation.
Parameters
----------
data : any
Input data required for the calculation. Typically a dictionary
specifying calculation type, k-points, cutoffs, etc.
"""
self.data = data
self.home = os.getcwd()
self.home_real = os.getcwd()
self.sd = SetDefaultVals()
self.writer = self.sd.create_writer()
[docs]
def set_home(self, write=False):
"""
Sets home folder
"""
if (self.writer.script_params['write_script'] == True):
self.write_cd(self.home)
try:
os.chdir(self.home)
except FileNotFoundError:
os.chdir(self.home_real)
[docs]
def set_work(self, write=False):
"""
Sets work folder
"""
if self.writer.script_params['write_script'] == True:
self.write_cd(self.home+'/'+self.system)
try:
os.chdir(self.home+'/'+self.system)
except FileNotFoundError:
os.chdir(self.home_real+'/'+self.system)
[docs]
def makedir(self, filein):
"""
Makes a directorty
"""
if (self.writer.script_params['write_script'] == True):
self.write_mkdir(filein)
else:
try:
os.mkdir(filein)
except FileExistsError:
pass
[docs]
def changedir(self, directory=None):
"""
Changes to a directory
"""
if self.writer.script_params['write_script'] == True:
self.write_cd(directory)
try:
os.chdir(directory)
except FileNotFoundError:
os.chdir('.')
[docs]
def set_folds(self, name, type_run, ins):
"""
sets the folders for methods
"""
if (type_run == 'scf'):
self.scf_fold = name
ins.scf_fold = self.scf_fold
self.state.update({'scf_fold': self.scf_fold})
if (type_run == 'bs'):
self.bs_fold = name
ins.scf_fold = self.scf_fold
self.state.update({'bs_fold':self.bs_fold})
if (type_run == 'nscf'):
self.nscf_fold = name
ins.scf_fold = self.scf_fold
ins.nscf_fold = self.nscf_fold
self.state.update({'nscf_fold':self.nscf_fold})
if (type_run == 'ph'):
self.ph_fold = name
ins.scf_fold = self.scf_fold
ins.ph_fold = self.ph_fold
self.state.update({'ph_fold':self.ph_fold})
if (type_run == 'epw1'):
if (name == 'epw1'):
name = 'epw'
self.epw_fold = name
ins.scf_fold = self.scf_fold
ins.nscf_fold = self.nscf_fold
ins.ph_fold = self.ph_fold
ins.epw_fold = self.epw_fold
self.state.update({'epw_fold':self.epw_fold})
else:
try:
ins.scf_fold = self.scf_fold
except AttributeError:
print('no scf folder')
#pass
try:
ins.nscf_fold = self.nscf_fold
except AttributeError:
pass
try:
ins.ph_fold = self.ph_fold
except AttributeError:
pass
try:
ins.epw_fold = self.epw_fold
except AttributeError:
pass
[docs]
def set_files(self, name, type_run, ins):
"""
Sets the files for methods
"""
if (type_run == 'scf'):
self.scf_file = name
ins.scf_file = self.scf_file
self.state.update({'scf_file': self.scf_file})
if (type_run == 'bs'):
self.bs_file = name
ins.scf_file = self.scf_file
self.state.update({'bs_file':self.bs_file})
if (type_run == 'nscf'):
self.nscf_file = name
ins.scf_file = self.scf_file
ins.nscf_file = self.nscf_file
self.state.update({'nscf_file':self.nscf_file})
if (type_run == 'ph'):
self.ph_file = name
ins.scf_file = self.scf_file
ins.ph_file = self.ph_file
self.state.update({'ph_file':self.ph_file})
if (type_run == 'epw1'):
if (name == 'epw1'):
name = 'epw1'
self.epw_file = name
ins.scf_file = self.scf_file
ins.nscf_file = self.nscf_file
ins.ph_file= self.ph_file
ins.epw_file = self.epw_file
self.state.update({'epw_file':self.epw_file})
if (type_run == 'epw2'):
if (name == 'epw2'):
name = 'epw2'
self.epw_file = name
ins.scf_file = self.scf_file
ins.nscf_file = self.nscf_file
ins.ph_file= self.ph_file
ins.epw_file = self.epw_file
self.state.update({'epw_file':self.epw_file})
else:
try:
ins.scf_file = self.scf_file
except AttributeError:
print('No scf file')
#pass
try:
ins.nscf_file = self.nscf_file
except AttributeError:
pass
try:
ins.ph_file = self.ph_file
except AttributeError:
pass
try:
ins.epw_file = self.epw_file
except AttributeError:
pass