Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion nexus/nexus/gamess.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def incorporate_result(self,result_name,result,sim):
self.block()
#end if
guess_inputs = obj()
ecounts = self.system.particles.electron_counts()
ecounts = self.system.n_up, self.system.n_down
orbs = result.orbitals
order_map = obj(up='iorder',down='jorder')
nelec_map = obj(up=ecounts[0],down=ecounts[1])
Expand Down
50 changes: 50 additions & 0 deletions nexus/nexus/physical_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,56 @@ def kf_rpa(self):
kfs = [(3*nelec*kvol1/(4*np.pi))**(1./3) for nelec in nelecs]
return np.array(kfs)
#end def kf_rpa


@property
def n_elec(self):
ions = self.structure.elem.tolist()
tot_charge = 0
for ion in ions:
if hasattr(self, "valency"):
if ion in self.valency:
tot_charge += self.valency[ion]
else:
_, element = Elements.is_element(ion, return_element=True)
tot_charge += element.atomic_number
else:
_, element = Elements.is_element(ion, return_element=True)
tot_charge += element.atomic_number

return tot_charge - self.net_charge

@property
def n_up(self):
return (self.n_elec + self.net_spin) // 2

@property
def n_down(self):
return (self.n_elec - self.net_spin) // 2

@property
Comment thread
jtkrogel marked this conversation as resolved.
def n_species(self):
return len(set(self.structure.elem))

@property
def n_ions(self):
return len(self.structure.elem)

@property
def ion_labels(self):
return set(self.structure.elem)

@property
def Zeff(self):
if hasattr(self, "valency"):
return self.valency

Zeff = {}
for ion in self.ion_labels:
_, element = Elements.is_element(ion, return_element=True)
Zeff[ion] = element.atomic_number

return Zeff
#end class PhysicalSystem


Expand Down
46 changes: 24 additions & 22 deletions nexus/nexus/pwscf_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -1675,17 +1675,17 @@ def incorporate_system(self,system,elem_order=None):
system.check_folded_system()
system.update_particles()
system.change_units('B')
p = system.particles
s = system.structure
nc = system.net_charge
ns = system.net_spin

nup = p.up_electron.count
ndn = p.down_electron.count
nup = system.n_up
ndn = system.n_down

self.system.ibrav = 0
# self.system['celldm(1)'] = 1.0e0
nions,nspecies = p.count_ions(species=True)
nions = system.n_ions
nspecies = system.n_species
self.system.nat = nions
self.system.ntyp = nspecies
self.system.tot_charge = nc
Expand Down Expand Up @@ -1717,19 +1717,19 @@ def incorporate_system(self,system,elem_order=None):
#end if
#end if

atoms = p.get_ions()
if 'masses' not in self.atomic_species:
self.atomic_species.masses = obj()
#end if
for name,a in atoms.items():
self.atomic_species.masses[name] = convert(a.mass,'me','amu')
for name in system.ion_labels:
is_elem, element = Elements.is_element(name, return_element=True)
self.atomic_species.masses[name] = element.atomic_weight
#end for
if elem_order is None:
self.atomic_species.atoms = list(sorted(atoms.keys()))
self.atomic_species.atoms = list(sorted(system.ion_labels))
else:
if set(elem_order)!=set(atoms.keys()):
self.error('elem_order is missing some atomic species\natomic species present: {0}\nelem_order: {1}'.format(sorted(atoms.keys()),elem_order))
elif len(elem_order)!=len(atoms):
if set(elem_order)!=set(system.ion_labels):
self.error('elem_order is missing some atomic species\natomic species present: {0}\nelem_order: {1}'.format(sorted(system.ion_labels),elem_order))
elif len(elem_order)!=system.n_ions:
self.error('elem_order has repeated elements\nelem_order: {0}'.format(elem_order))
#end if
self.atomic_species.atoms = list(elem_order)
Expand All @@ -1739,7 +1739,8 @@ def incorporate_system(self,system,elem_order=None):
pp = self.atomic_species.pseudopotentials
for atom in self.atomic_species.atoms:
if atom not in pp:
iselem,symbol = p.is_element(atom,symbol=True)
iselem,element = Elements.is_element(atom,return_element=True)
symbol = element.symbol
if iselem and symbol in pp:
pp[atom] = str(pp[symbol])
#end if
Expand Down Expand Up @@ -1770,17 +1771,17 @@ def incorporate_system_old(self,system,spin_polarized=None):
system.check_folded_system()
system.update_particles()
system.change_units('B')
p = system.particles
s = system.structure
nc = system.net_charge
ns = system.net_spin

nup = p.up_electron.count
ndn = p.down_electron.count
nup = system.n_up
ndn = system.n_down

self.system.ibrav = 0
# self.system['celldm(1)'] = 1.0e0
nions,nspecies = p.count_ions(species=True)
nions = system.n_ions
nspecies = system.n_species
self.system.nat = nions
self.system.ntyp = nspecies
#self.system.nelec = nup+ndn
Expand Down Expand Up @@ -1819,18 +1820,19 @@ def incorporate_system_old(self,system,spin_polarized=None):
#end if
#end if

atoms = p.get_ions()
masses = obj()
for name,a in atoms.items():
masses[name] = convert(a.mass,'me','amu')
for name in system.ion_labels:
is_elem, element = Elements.is_element(name, return_element=True)
masses[name] = element.atomic_weight
#end for
self.atomic_species.atoms = list(sorted(atoms.keys()))
self.atomic_species.atoms = list(sorted(system.ion_labels))
self.atomic_species.masses = masses
# set pseudopotentials for renamed atoms (e.g. Cu3 is same as Cu)
pp = self.atomic_species.pseudopotentials
for atom in self.atomic_species.atoms:
if atom not in pp:
iselem,symbol = p.is_element(atom,symbol=True)
iselem,element = Elements.is_element(atom,return_element=True)
symbol = element.symbol
if iselem and symbol in pp:
pp[atom] = str(pp[symbol])
#end if
Expand Down Expand Up @@ -2265,7 +2267,7 @@ def generate_any_pwscf_input(**kwargs):

# set nbnd using bandfac, if provided
if nbnd is None and bandfac is not None:
nocc = max(system.particles.electron_counts())
nocc = max(system.n_up, system.n_down)
pw.system.nbnd = int(np.ceil(nocc*bandfac))
#end if

Expand Down
16 changes: 8 additions & 8 deletions nexus/nexus/qmcpack.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,11 +188,11 @@ def unfolded_nelecs(self):
Returns the number of electrons in the primitive cell
'''
if self.system.folded_system is None:
n_up = self.system.particles.up_electron.count
n_dn = self.system.particles.down_electron.count
n_up = self.system.n_up
n_dn = self.system.n_down
else:
n_up = self.system.folded_system.particles.up_electron.count
n_dn = self.system.folded_system.particles.down_electron.count
n_up = self.system.folded_system.n_up
n_dn = self.system.folded_system.n_down
#end if
nelecs = n_up + n_dn
return nelecs
Expand Down Expand Up @@ -463,8 +463,8 @@ def sum_charge_twists(self):
'''
Returns the net charge of a system with multiple twists (not averaged)
'''
n_up = self.system.particles.up_electron.count
n_dn = self.system.particles.down_electron.count
n_up = self.system.n_up
n_dn = self.system.n_down
n_total = n_up + n_dn
nelecs_at_twist = self.nelecs_at_twist
kweights = np.array(self.system.structure.kweights)
Expand Down Expand Up @@ -536,8 +536,8 @@ def write_gcta_report(self, locdir, fermi_level, scf_magnet = None):
spin_sum_twists = self.sum_spin_twists()
qmc_magnet = spin_sum_twists / nosym_kpoints
#end if
n_up = self.system.particles.up_electron.count
n_dn = self.system.particles.down_electron.count
n_up = self.system.n_up
n_dn = self.system.n_down
n_total = n_up + n_dn
nelecs_at_twist = self.nelecs_at_twist
fermi_level = np.array(fermi_level)
Expand Down
Loading
Loading