Source code for pyscf.pbc.gto.basis

#!/usr/bin/env python
# Copyright 2014-2018 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.
#
# Author: Qiming Sun <osirpt.sun@gmail.com>
#         Timothy Berkelbach <tim.berkelbach@gmail.com> 

import os
from pyscf.gto import basis as _mol_basis
from pyscf.gto.basis import parse_ecp, load_ecp
from pyscf.pbc.gto.basis import parse_cp2k
from pyscf import __config__

ALIAS = {
    'gthaugdzvp'  : 'gth-aug-dzvp.dat',
    'gthaugqzv2p' : 'gth-aug-qzv2p.dat',
    'gthaugqzv3p' : 'gth-aug-qzv3p.dat',
    'gthaugtzv2p' : 'gth-aug-tzv2p.dat',
    'gthaugtzvp'  : 'gth-aug-tzvp.dat',
    'gthdzv'      : 'gth-dzv.dat',
    'gthdzvp'     : 'gth-dzvp.dat',
    'gthqzv2p'    : 'gth-qzv2p.dat',
    'gthqzv3p'    : 'gth-qzv3p.dat',
    'gthszv'      : 'gth-szv.dat',
    'gthtzv2p'    : 'gth-tzv2p.dat',
    'gthtzvp'     : 'gth-tzvp.dat',
    'gthccdzvp'   : 'gth-cc-dzvp.dat',
    'gthcctzvp'   : 'gth-cc-tzvp.dat',
    'gthccqzvp'   : 'gth-cc-qzvp.dat',
    'gthszvmolopt'      : 'gth-szv-molopt.dat',
    'gthdzvpmolopt'     : 'gth-dzvp-molopt.dat',
    'gthtzvpmolopt'     : 'gth-tzvp-molopt.dat',
    'gthtzv2pmolopt'    : 'gth-tzv2p-molopt.dat',
    'gthszvmoloptsr'    : 'gth-szv-molopt-sr.dat',
    'gthdzvpmoloptsr'   : 'gth-dzvp-molopt-sr.dat',
}

OPTIMIZE_CONTRACTION = getattr(__config__, 'pbc_gto_basis_parse_optimize', False)
[docs]def parse(string, optimize=OPTIMIZE_CONTRACTION): '''Parse the basis text in CP2K format, return an internal basis format which can be assigned to :attr:`Cell.basis` Args: string : Blank linke and the lines of "BASIS SET" and "END" will be ignored Examples: >>> cell = gto.Cell() >>> cell.basis = {'C': gto.basis.parse(""" ... C DZVP-GTH ... 2 ... 2 0 1 4 2 2 ... 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000 ... 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000 ... 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000 ... 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000 ... 3 2 2 1 1 ... 0.5500000000 1.0000000000 ... # ... """)} ''' return parse_cp2k.parse(string)
[docs]def load(file_or_basis_name, symb, optimize=OPTIMIZE_CONTRACTION): '''Convert the basis of the given symbol to internal format Args: file_or_basis_name : str Case insensitive basis set name. Special characters will be removed. symb : str Atomic symbol, Special characters will be removed. Examples: Load DZVP-GTH of carbon >>> cell = gto.Cell() >>> cell.basis = {'C': load('gth-dzvp', 'C')} ''' if os.path.isfile(file_or_basis_name): try: return parse_cp2k.load(file_or_basis_name, symb) except RuntimeError: with open(file_or_basis_name, 'r') as fin: return parse_cp2k.parse(fin.read()) name = _mol_basis._format_basis_name(file_or_basis_name) if '@' in name: split_name = name.split('@') assert len(split_name) == 2 name = split_name[0] contr_scheme = _mol_basis._convert_contraction(split_name[1]) else: contr_scheme = 'Full' if name not in ALIAS: return _mol_basis.load(file_or_basis_name, symb) basmod = ALIAS[name] symb = ''.join(i for i in symb if i.isalpha()) b = parse_cp2k.load(os.path.join(os.path.dirname(__file__), basmod), symb) if contr_scheme != 'Full': b = _mol_basis._truncate(b, contr_scheme, symb, split_name) return b
del(OPTIMIZE_CONTRACTION)