eplf/scripts/input_wrapper.py

371 lines
9.6 KiB
Python

#!/usr/bin/python
from ezfio import ezfio
import os
geom_data = """
nucl_charge nucl_coord
""".split()
ro_data = """det_num nucl_num mo_num ao_num has_mpi
""".split()
rw_data = """
point_num step_size origin opposite nproc
compute_elf compute_eplf compute_density
compute_elf_grad compute_eplf_grad compute_density_grad
compute_elf_lapl compute_eplf_lapl compute_density_lapl
compute_elf_partition compute_eplf_partition compute_density_partition
""".split()
rw_data_full = rw_data + geom_data
######################################################################
DEFAULT_COMPUTE_EPLF = True
DEFAULT_COMPUTE_ELF = False
DEFAULT_COMPUTE_DENSITY = False
DEFAULT_COMPUTE_EPLF_GRAD = False
DEFAULT_COMPUTE_ELF_GRAD = False
DEFAULT_COMPUTE_DENSITY_GRAD = False
DEFAULT_COMPUTE_EPLF_LAPL = False
DEFAULT_COMPUTE_ELF_LAPL = False
DEFAULT_COMPUTE_DENSITY_LAPL = False
DEFAULT_COMPUTE_EPLF_PART = False
DEFAULT_COMPUTE_ELF_PART = False
DEFAULT_COMPUTE_DENSITY_PART = False
DEFAULT_POINT_NUM = [80,80,80]
######################################################################
class InputFileExn(Exception):
"""Errors in input file raise this exception"""
def __init__(self,msg):
self.msg = msg
def __str__(self):
result = "\n\n=========================================\n"
result += self.msg
result += "\n=========================================\n"
return result
######################################################################
class InputFile(object):
def __init__(self,name):
assert isinstance(name,str)
wd = os.getcwd()
try:
os.chdir(name)
except OSError:
raise InputFileExn("File not found")
try:
file = open(".version","r")
file.close()
except IOError:
raise InputFileExn("This directory is not a EZFIO file.")
os.chdir(wd)
ezfio.set_filename(name)
l = len(name)
while name[l-1] == '/':
l -= 1
self.name = name[:l]
# Read-only values
def get_has_mpi(self):
if os.getenv("EPLF_HAS_MPI","1") == "1":
return True
else:
return False
def get_det_num(self):
if ezfio.has_determinants_det_num():
return ezfio.get_determinants_det_num()
else:
return None
def get_nucl_num(self):
if ezfio.has_nuclei_nucl_num():
return ezfio.get_nuclei_nucl_num()
else:
return None
def get_ao_num(self):
if ezfio.has_ao_basis_ao_num():
return ezfio.get_ao_basis_ao_num()
else:
return None
def get_mo_num(self):
if ezfio.has_mo_basis_mo_tot_num():
return ezfio.get_mo_basis_mo_tot_num()
else:
return None
# Read/write values
def get_nucl_coord(self):
if ezfio.has_nuclei_nucl_coord():
return ezfio.get_nuclei_nucl_coord()
else:
return None
def set_nucl_coord(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
for i in value:
try:
float(i)
except:
raise InputFileExn("Wrong type")
ezfio.set_nuclei_nucl_coord(value)
def get_nucl_charge(self):
if ezfio.has_nuclei_nucl_charge():
return ezfio.get_nuclei_nucl_charge()
else:
return None
def set_nucl_charge(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
for i in value:
try:
float(i)
except:
raise InputFileExn("Wrong type")
ezfio.set_nuclei_nucl_charge(value)
def get_point_num(self):
if ezfio.has_grid_point_num():
return ezfio.get_grid_point_num()
else:
return DEFAULT_POINT_NUM
def set_point_num(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
if len(value) != 3:
raise InputFileExn("Wrong type")
for i in value:
try:
int(i)
except:
raise InputFileExn("Wrong type")
ezfio.set_grid_point_num(value)
def get_step_size(self):
if ezfio.has_grid_step_size():
return ezfio.get_grid_step_size()
else:
return None
def set_step_size(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
for i in value:
try:
float(i)
except:
raise InputFileExn("Wrong type")
ezfio.set_grid_step_size(value)
def get_origin(self):
if ezfio.has_grid_origin():
return ezfio.get_grid_origin()
else:
return None
def set_origin(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
if len(value) != 3:
raise InputFileExn("Wrong type")
for i in value:
if not isinstance(i,float):
raise InputFileExn("Wrong type")
for j in value:
try:
float(j)
except:
raise InputFileExn("Wrong type")
ezfio.set_grid_origin(value)
def get_opposite(self):
if ezfio.has_grid_opposite():
return ezfio.get_grid_opposite()
else:
return None
def set_opposite(self,value):
if not isinstance(value,list):
raise InputFileExn("Wrong type")
if len(value) != 3:
raise InputFileExn("Wrong type")
for i in value:
if not isinstance(i,float):
raise InputFileExn("Wrong type")
for j in value:
try:
float(j)
except:
raise InputFileExn("Wrong type")
ezfio.set_grid_opposite(value)
def get_nproc(self):
if ezfio.has_compute_nproc():
return ezfio.get_compute_nproc()
else:
return 1
def set_nproc(self,value):
if not isinstance(value,int):
raise InputFileExn("Wrong type")
if value < 1:
raise InputFileExn("Wrong type")
ezfio.set_compute_nproc(value)
def get_compute_elf(self):
if ezfio.has_compute_elf():
return ezfio.get_compute_elf()
else:
return DEFAULT_COMPUTE_ELF
def set_compute_elf(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_elf(value)
def get_compute_eplf(self):
if ezfio.has_compute_eplf():
return ezfio.get_compute_eplf()
else:
return DEFAULT_COMPUTE_EPLF
def set_compute_eplf(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_eplf(value)
def get_compute_density(self):
if ezfio.has_compute_density():
return ezfio.get_compute_density()
else:
return DEFAULT_COMPUTE_DENSITY
def set_compute_density(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_density(value)
def get_compute_elf_grad(self):
if ezfio.has_compute_elf_grad():
return ezfio.get_compute_elf_grad()
else:
return DEFAULT_COMPUTE_ELF_GRAD
def set_compute_elf_grad(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_elf_grad(value)
def get_compute_eplf_grad(self):
if ezfio.has_compute_eplf_grad():
return ezfio.get_compute_eplf_grad()
else:
return DEFAULT_COMPUTE_EPLF_GRAD
def set_compute_eplf_grad(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_eplf_grad(value)
def get_compute_density_grad(self):
if ezfio.has_compute_density_grad():
return ezfio.get_compute_density_grad()
else:
return DEFAULT_COMPUTE_DENSITY_GRAD
def set_compute_density_grad(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_density_grad(value)
def get_compute_elf_lapl(self):
if ezfio.has_compute_elf_lapl():
return ezfio.get_compute_elf_lapl()
else:
return DEFAULT_COMPUTE_ELF_LAPL
def set_compute_elf_lapl(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_elf_lapl(value)
def get_compute_eplf_lapl(self):
if ezfio.has_compute_eplf_lapl():
return ezfio.get_compute_eplf_lapl()
else:
return DEFAULT_COMPUTE_EPLF_LAPL
def set_compute_eplf_lapl(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_eplf_lapl(value)
def get_compute_density_lapl(self):
if ezfio.has_compute_density_lapl():
return ezfio.get_compute_density_lapl()
else:
return DEFAULT_COMPUTE_DENSITY_LAPL
def set_compute_density_lapl(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_density_lapl(value)
def get_compute_elf_partition(self):
if ezfio.has_compute_elf_partition():
return ezfio.get_compute_elf_partition()
else:
return DEFAULT_COMPUTE_ELF_PART
def set_compute_elf_partition(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_elf_partition(value)
def get_compute_eplf_partition(self):
if ezfio.has_compute_eplf_partition():
return ezfio.get_compute_eplf_partition()
else:
return DEFAULT_COMPUTE_ELF_PART
def set_compute_eplf_partition(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_eplf_partition(value)
def get_compute_density_partition(self):
if ezfio.has_compute_density_partition():
return ezfio.get_compute_density_partition()
else:
return DEFAULT_COMPUTE_DENSITY_PART
def set_compute_density_partition(self,value):
if not isinstance(value,bool):
raise InputFileExn("Wrong type")
ezfio.set_compute_density_partition(value)
# Build the corresponding properties
for i in ro_data:
exec("%s = property(fget=get_%s,fset=None)"%(i,i))
for i in rw_data_full:
exec("%s = property(fget=get_%s,fset=set_%s)"%(i,i,i))