Source code for pyscf.tools.chkfile_util

#!/usr/bin/env python
# Copyright 2014-2020 The PySCF Developers. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys
import numpy
from pyscf.scf import chkfile
from pyscf.scf import hf

[docs] def mulliken(filename, key='scf'): '''Reading scf/mcscf information from chkfile, then do Mulliken population analysis for the density matrix ''' if key.lower() == 'mcscf': mol = chkfile.load_mol(filename) mo_coeff = chkfile.load(filename, 'mcscf/mo_coeff') mo_occ = chkfile.load(filename, 'mcscf/mo_occ') else: mol, mf = chkfile.load_scf(filename) mo_coeff = mf['mo_coeff'] mo_occ = mf['mo_occ'] dm = numpy.dot(mo_coeff*mo_occ, mo_coeff.T) hf.mulliken_meta(mol, dm)
[docs] def dump_mo(filename, key='scf'): '''Read scf/mcscf information from chkfile, then dump the orbital coefficients. ''' from pyscf.tools import dump_mat if key.lower() == 'mcscf': mol = chkfile.load_mol(filename) mo_coeff = chkfile.load(filename, 'mcscf/mo_coeff') else: mol, mf = chkfile.load_scf(filename) mo_coeff = mf['mo_coeff'] dump_mat.dump_mo(mol, mo_coeff)
[docs] def molden(filename, key='scf'): '''Read scf/mcscf information from chkfile, then convert the scf/mcscf orbitals to molden format. ''' from pyscf.tools import molden molden.from_chkfile(filename+'.molden', filename, key+'/mo_coeff')
if __name__ == '__main__': if len(sys.argv) == 1: print('%s chkfile_name [pop|mo|molden] [scf|mcscf]' % sys.argv[0]) exit() filename = sys.argv[1] fndic = {'pop': mulliken, 'mo': dump_mo, 'molden': molden} fn = fndic[sys.argv[2].lower()] if len(sys.argv) > 3: key = sys.argv[3] fn(filename, key) else: fn(filename)