mirror of
https://gitlab.com/scemama/resultsFile.git
synced 2024-06-19 19:52:12 +02:00
134 lines
3.5 KiB
Python
134 lines
3.5 KiB
Python
|
#!/usr/bin/env python
|
||
|
# resultsFile is a library which allows to read output files of quantum
|
||
|
# chemistry codes and write input files.
|
||
|
# Copyright (C) 2007 Anthony SCEMAMA
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License along
|
||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
#
|
||
|
# Anthony Scemama
|
||
|
# LCPQ - IRSAMC
|
||
|
# Universite Paul Sabatier
|
||
|
# 118, route de Narbonne
|
||
|
# 31062 Toulouse Cedex 4
|
||
|
# scemama@irsamc.ups-tlse.fr
|
||
|
|
||
|
|
||
|
|
||
|
from library import *
|
||
|
from math import *
|
||
|
|
||
|
class orbital(object):
|
||
|
"""Class for an orbital."""
|
||
|
|
||
|
def __init__(self):
|
||
|
self._set = None
|
||
|
self._eigenvalue = None
|
||
|
self._vector = []
|
||
|
self._basis = None
|
||
|
self._sym = None
|
||
|
|
||
|
def __repr__(self):
|
||
|
out = "%10s %6s %10.6f\n"%(\
|
||
|
self.set, self.sym, self.eigenvalue)
|
||
|
count=0
|
||
|
for c in self.vector:
|
||
|
out += "%17.8e "%(c,)
|
||
|
count += 1
|
||
|
if count == 5:
|
||
|
count = 0
|
||
|
out += '\n'
|
||
|
return out
|
||
|
|
||
|
def __repr__debug__(self):
|
||
|
out = ""
|
||
|
out += "Orbital:\n"
|
||
|
out += " Set : "+str(self.set)+'\n'
|
||
|
out += " Sym : "+str(self.sym)+'\n'
|
||
|
out += " Basis : "+str(self.basis)+'\n'
|
||
|
out += " Eigenvalue : "+str(self.eigenvalue)+'\n'
|
||
|
out += " Vector : "+str(self.vector)+'\n'
|
||
|
return out
|
||
|
|
||
|
def __cmp__(self,other):
|
||
|
assert ( isinstance(other,orbital) )
|
||
|
if self.eigenvalue < other.eigenvalue:
|
||
|
return -1
|
||
|
elif self.eigenvalue > other.eigenvalue:
|
||
|
return 1
|
||
|
elif self.eigenvalue == other.eigenvalue:
|
||
|
return 0
|
||
|
|
||
|
def dot(self,other):
|
||
|
assert ( isinstance(other,orbital) )
|
||
|
result = 0.
|
||
|
for i,j in zip(self.vector,other.vector):
|
||
|
result += i*j
|
||
|
return sqrt(result)
|
||
|
|
||
|
def is_ortho(self,other):
|
||
|
assert ( isinstance(other,orbital) )
|
||
|
if self.dot(other) == 0. :
|
||
|
return True
|
||
|
else:
|
||
|
return False
|
||
|
|
||
|
def norm(self):
|
||
|
return self.dot(self)
|
||
|
|
||
|
def value(self,r):
|
||
|
"""Value at r."""
|
||
|
x, y, z = r
|
||
|
result = 0.
|
||
|
for c,chi in zip(self.vector,self.basis):
|
||
|
result += c*chi.value(r)
|
||
|
return result
|
||
|
|
||
|
for i in "eigenvalue vector basis set sym".split():
|
||
|
exec """
|
||
|
def get_%(i)s(self): return self._%(i)s
|
||
|
def set_%(i)s(self,value): self._%(i)s = value
|
||
|
%(i)s = property(fget=get_%(i)s,fset=set_%(i)s) """%locals()
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
l = []
|
||
|
l.append(orbital())
|
||
|
l.append(orbital())
|
||
|
l.append(orbital())
|
||
|
l[0].eigenvalue = 2.
|
||
|
l[1].eigenvalue = 1.
|
||
|
l[2].eigenvalue = 3.
|
||
|
for i in l:
|
||
|
print i.eigenvalue
|
||
|
l.sort()
|
||
|
print ""
|
||
|
for i in l:
|
||
|
print i.eigenvalue
|
||
|
l[0].vector = [1., 0., 0.]
|
||
|
l[1].vector = [0., 1., 0.]
|
||
|
l[2].vector = [0., 1., 1.]
|
||
|
print l[0].is_ortho(l[1])
|
||
|
print l[1].is_ortho(l[2])
|
||
|
print l[1].dot(l[2])
|
||
|
print l[1].dot(l[0])
|
||
|
print l[1].norm()
|
||
|
print l[2].norm()
|
||
|
|
||
|
|
||
|
|