# -*- coding: utf-8 -*-"""Created on 2020-05-11@author: Vincent Michaud-Rioux"""fromnanotools.aobasisimportVnlBasisfromnanotools.baseimportBasefromnanotools.orbimportRadFuncfromnanotools.utilsimportload_dcalimportattrimportnumpyasnp
[docs]@attr.sclassPspot(Base):""" pspot class. Attributes: symbol : string element symbol path : string pseudopotential path Z: integer pseudoion charge vlc : radFunc local pseudopotential rpc : radFunc partial core charge vnl : kbOrb-array KB-orbitals vso : kbOrb-array SO-orbitals """path:str=attr.ib(validator=attr.validators.instance_of(str))symbol:str=attr.ib(default=None,converter=attr.converters.optional(str),validator=attr.validators.optional(attr.validators.instance_of(str)),)Z:float=attr.ib(default=None,converter=attr.converters.optional(float),validator=attr.validators.optional(attr.validators.instance_of(float)),)vlc=attr.ib(default=None)rpc=attr.ib(default=None)vnl=attr.ib(default=None)vso=attr.ib(default=None)def__attrs_post_init__(self):self._set_vlc()self._set_rpc()self._set_vnl()# self._init_vso()# temporarily do not real vso, just fill field with vnl values# self.vso = copy.deepcopy(self.vnl)# self.vso.orb = self.vso.orb[0:1]# self.vso.numorb = 1# self.vso = VnlBasis({"symbol":self.symbol, "path":self.path}, 'VnlSO')ifself.symbolisNoneorself.ZisNone:data,fmt=load_dcal(self.path)forsnam,inaminzip(["Z","symbol"],["N","symbol"]):try:iffmt=="mat":tmp=data["atom"][0][0][inam][0][0]else:tmp=data["atom"][inam][0:]ifinam=="symbol":tmp="".join(map(chr,tmp.flatten()))ifisinstance(tmp,np.ndarray):assertlen(tmp)==1tmp=tmp.astype(float).item()ifisinstance(tmp,str):tmp=str(tmp)setattr(self,snam,tmp)exceptValueError:raiseException("Couldn't find parameter 'atom.%s' in file %s."%(inam,self.path))def_set_vlc(self):ifisinstance(self.vlc,dict)and"path"inself.vlc.keys():self.vlc=RadFunc(**self.vlc)else:self.vlc=RadFunc(path=self.path,varname="Vlocal")def_set_rpc(self):ifisinstance(self.rpc,dict)and"path"inself.rpc.keys():self.rpc=RadFunc(**self.rpc)else:self.rpc=RadFunc(path=self.path,varname="Rpc")def_set_vnl(self):ifisinstance(self.vnl,dict)andset(["path","varname","symbol"]).issubset(set(self.vnl.keys())):self.vnl=VnlBasis(**self.vnl)else:self.vnl=VnlBasis(path=self.path,varname="Vnl",symbol=self.symbol)def_init_vso(self):ifisinstance(self.vso,dict)andset(["path","varname","symbol"]).issubset(set(self.vso.keys())):self.vso=VnlBasis(**self.vso)else:self.vso=VnlBasis(path=self.path,varname="VnlSO",symbol=self.symbol)def_rm_vso(self):self.vso=Nonedefto_vacuum(self):self.path=""self.symbol+="_Va"self.Z=0self.vlc.zero_out()self.rpc.zero_out()self.vnl.to_vacuum()self._rm_vso()