diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..017331b --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.pyc +__pycache__ +__pycache__/* +shazi_* +*.bak diff --git a/README.md b/README.md new file mode 100644 index 0000000..307c0cb --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +### Folder contents +- `oep-wy`: codes for OEP and dataset generation +- `nn-train`: codes to train and test a NN model +- `xcnn`: codes to perform KS-DFT/NN using trained NN model as an xc function + +### Example +An example is provided in folder `example`. 11 $\rm H_2$ and 11 $\rm HeH^+$ molecules are used. + +- OEP: `python run_oep.py` +- Generate dataset: `python gen_dataset.py` +- Training: `python run_train.py` +- Testing: `python run_test.py` (only to check training progress, different from KS-SCF/NN) +- KS-SCF/NN: `python run_xcnn.py` + +The model obtained from training can be used in KS-DFT/NN. A pre-trained model is also provided in `example/xcnn/saved_model/H2-HeH+_CNN_GGA_1_0.504-0.896-0.008_HFX_ll_0.9_9.dat`. + + +### Configuration +#### OEP and Dataset +**[OEP]** +Key | Value | Note +----|------ | ---- +InputDensity | none | Density matrix in `ndarray` format. Will compute a CCSD 1-rdm if `none` is given. +Structure | structure/H2/d0500.str +OrbitalBasis | aug-cc-pvqz +PotentialBasis | aug-cc-pvqz +ReferencePotential | hfx | Coulomb matrix and Hartree-Fock Exchange matrix +PotentialCoefficientInit | zeros | Can use a txt or `ndarray` file +CheckPointPath | oep-wy/chk/H2/d0500 +ConvergenceCriterion | 1.e-12 | Stop criterion of Newton optimization procedure. +SVDCutoff | 5.e-6 | Cutoff for truncated SVD +LambdaRegulation | 0 | Lambda value for regulation to get smooth potential. Used for multiple electrons system. +ZeroForceConstrain | false | It seems not a good choice to use zero force constrain during optimization +RealSpaceAnalysis | true | Output density difference between input and output density in real space + +**[DATASET]** +Key | Value | Note +----|------ | ---- +MeshLevel | 3 +CubeLength | 0.9 | in Bohr +CubePoint | 9 | number of discrete points +OutputPath | oep-wy/dataset/H2 +OutputName | d0500 +Symmetric | xz | Transform $(x, y, z)$ to $(\sqrt{x^2 + y^2}, 0, z)$ and keep only unique points + +#### Training and Testing +##### Training +**[OPTIONS]** +Key | Value | Note +----|------ | ---- +prefix | nn-train +log_path | %(prefix)s/train/train.log +verbose | False +data_path | %(prefix)s/dataset/H2-HeH+_0.9_9.npy +model | CNN_GGA_1_zsym | The models with and without `_zsym` suffix have same architecture and only differ in output. See `nn-train/model.py` and `nn-train/const_list.py`. +model_save_path | %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat +batch_size | 200 +max_epoch | 200000 +learning_rate | 5e-3 +loss_function | MSELoss_zsym +optimiser | SGD +train_set_size | 78800 +validate_set_size | 19600 +enable_cuda | True +constrain | zsym | Needs to be `zsym` to use model and loss function with `_zsym` suffix + +##### Testing +**[OPTIONS]** +Key | Value | Note +----|------ | ---- +prefix | nn-train +log_path | %(prefix)s/test/H2/d0500/test.log +verbose | False +data_path | %(prefix)s/dataset/H2/d0500.npy +model | CNN_GGA_1 +restart | %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size | 1 +loss_function | MSELoss +optimiser | SGD +test_set_size | 4920 +enable_cuda | True +output_path | %(prefix)s/test/H2/d0500 +constrain | none + +#### KS-SCF/NN +**[XCNN]** +Key | Value | Note +----|------ | ---- +Verbose | True +CheckPointPath | xcnn/chk/H2/d0500 +EnableCuda | True +Structure | structure/H2/d0500.str +OrbitalBasis | aug-cc-pVQZ +ReferencePotential | hfx | Should be same as the one used in OEP +Model | cnn_gga_1 +ModelPath | xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +MeshLevel | 3 | Should be same as the one used in training +CubeLength | 0.9 | Should be same as the one used in training +CubePoint | 9 | Should be same as the one used in training +Symmetric | xz+ | Similar to xz but keep only $z>0$ part. Only for $\rm H_2$ +InitDensityMatrix | rks | Used in combination with next row to setup initial density matrix for KS-SCF/NN +xcFunctional | b3lypg | Follow PySCF's convention. In PySCF, `b3lyp` is different from `b3lypg` and the latter refers to conventional `B3LYP` functional. +ConvergenceCriterion | 1.e-6 | For SCF procedure +MaxIteration | 99 +ZeroForceConstrain | True | Typically enabled to keep zero force condition. + +## Dependencies +- numpy +- scipy +- tqdm +- ConfigParser/configparser +- PyTorch with CUDA support +- PySCF > 1.5 + +### Note on PySCF +A customised version of libcint is used to support extra Gaussian integrals. Therefore PySCF installed using pip/conda/docker will fail and you may have to compile it from source code. A straight workaround is described below (maybe not that efficient): +1. Download [PySCF](https://github.com/pyscf/pyscf) source code and follow its procedure to compile core module. +2. Go to `pyscf/lib/build/deps/src/libcint`, where the source code of libcint is placed. +3. Open `scripts/auto_intor.cl` and add the following two lines to the last `gen-cint` block: +``` + '("int3c1e_ovlp" ( \, \, )) + '("int3c1e_ipovlp" (nabla \, \, )) +``` +4. Follow the instructions at `Generating integrals` in `README` to generate new codes and place them accordingly. I choose to NOT update libcint here. +5. Go back to `pyscf/lib/build` where the command to compile PySCF core module is executed. Run `make` again and the libcint library will be updated. +6. Open `pyscf/gto/moleintor.py` and add the following two lines to `_INTOR_FUNCTIONS` +``` + 'int3c1e_ovlp' : (1, 1), + 'int3c1e_ipovlp' : (3, 3), +``` +7. Done diff --git a/example/gen_dataset.py b/example/gen_dataset.py new file mode 100644 index 0000000..ae91978 --- /dev/null +++ b/example/gen_dataset.py @@ -0,0 +1,25 @@ +from __future__ import print_function +import numpy as np +import os +import sys + + +PATH_PREFIX = "./oep-wy/dataset" + +raw_files_H2 = ["%s/H2/%s" % (PATH_PREFIX, f) for f in os.listdir("%s/H2" % (PATH_PREFIX)) if (not f.endswith("coords.npy")) and f.endswith(".npy")] +raw_files_H2 = sorted(raw_files_H2) +raw_files_HeH = ["%s/HeH+/%s" % (PATH_PREFIX, f) for f in os.listdir("%s/HeH+" % (PATH_PREFIX)) if (not f.endswith("coords.npy")) and f.endswith(".npy")] +raw_files_HeH = sorted(raw_files_HeH) +raw_files = raw_files_H2 + raw_files_HeH + +all_data = np.load(raw_files[0]) +for i, f in enumerate(raw_files[1:]): + new_data = np.load(f) + all_data = np.concatenate((all_data, new_data), axis=0) +assert(all_data.shape[1] == 4 * 9 * 9 * 9 + 1) + +print("Dataset size:", all_data.shape) + +np.random.shuffle(all_data) +np.save("%s/H2-HeH+_0.9_9" % (PATH_PREFIX), all_data) + diff --git a/example/nn-train/test/H2/d0500.cfg b/example/nn-train/test/H2/d0500.cfg new file mode 100644 index 0000000..268dfb0 --- /dev/null +++ b/example/nn-train/test/H2/d0500.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0500/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0500.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0500 + +constrain: none diff --git a/example/nn-train/test/H2/d0540.cfg b/example/nn-train/test/H2/d0540.cfg new file mode 100644 index 0000000..0dce4d1 --- /dev/null +++ b/example/nn-train/test/H2/d0540.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0540/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0540.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0540 + +constrain: none diff --git a/example/nn-train/test/H2/d0580.cfg b/example/nn-train/test/H2/d0580.cfg new file mode 100644 index 0000000..e9a0df2 --- /dev/null +++ b/example/nn-train/test/H2/d0580.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0580/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0580.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0580 + +constrain: none diff --git a/example/nn-train/test/H2/d0620.cfg b/example/nn-train/test/H2/d0620.cfg new file mode 100644 index 0000000..69504f9 --- /dev/null +++ b/example/nn-train/test/H2/d0620.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0620/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0620.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0620 + +constrain: none diff --git a/example/nn-train/test/H2/d0660.cfg b/example/nn-train/test/H2/d0660.cfg new file mode 100644 index 0000000..ebaf1a6 --- /dev/null +++ b/example/nn-train/test/H2/d0660.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0660/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0660.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0660 + +constrain: none diff --git a/example/nn-train/test/H2/d0700.cfg b/example/nn-train/test/H2/d0700.cfg new file mode 100644 index 0000000..5f685a5 --- /dev/null +++ b/example/nn-train/test/H2/d0700.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0700/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0700.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0700 + +constrain: none diff --git a/example/nn-train/test/H2/d0740.cfg b/example/nn-train/test/H2/d0740.cfg new file mode 100644 index 0000000..786c73a --- /dev/null +++ b/example/nn-train/test/H2/d0740.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0740/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0740.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0740 + +constrain: none diff --git a/example/nn-train/test/H2/d0780.cfg b/example/nn-train/test/H2/d0780.cfg new file mode 100644 index 0000000..e90780d --- /dev/null +++ b/example/nn-train/test/H2/d0780.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0780/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0780.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0780 + +constrain: none diff --git a/example/nn-train/test/H2/d0820.cfg b/example/nn-train/test/H2/d0820.cfg new file mode 100644 index 0000000..ef818e4 --- /dev/null +++ b/example/nn-train/test/H2/d0820.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0820/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0820.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0820 + +constrain: none diff --git a/example/nn-train/test/H2/d0860.cfg b/example/nn-train/test/H2/d0860.cfg new file mode 100644 index 0000000..fecfe2f --- /dev/null +++ b/example/nn-train/test/H2/d0860.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0860/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0860.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0860 + +constrain: none diff --git a/example/nn-train/test/H2/d0900.cfg b/example/nn-train/test/H2/d0900.cfg new file mode 100644 index 0000000..7d82b9c --- /dev/null +++ b/example/nn-train/test/H2/d0900.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/H2/d0900/test.log +verbose: False +data_path: %(prefix)s/dataset/H2/d0900.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/H2/d0900 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0500.cfg b/example/nn-train/test/HeH+/d0500.cfg new file mode 100644 index 0000000..d059c33 --- /dev/null +++ b/example/nn-train/test/HeH+/d0500.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0500/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0500.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0500 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0540.cfg b/example/nn-train/test/HeH+/d0540.cfg new file mode 100644 index 0000000..f5905f2 --- /dev/null +++ b/example/nn-train/test/HeH+/d0540.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0540/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0540.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0540 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0580.cfg b/example/nn-train/test/HeH+/d0580.cfg new file mode 100644 index 0000000..fc85fb1 --- /dev/null +++ b/example/nn-train/test/HeH+/d0580.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0580/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0580.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0580 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0620.cfg b/example/nn-train/test/HeH+/d0620.cfg new file mode 100644 index 0000000..f8956ed --- /dev/null +++ b/example/nn-train/test/HeH+/d0620.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0620/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0620.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0620 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0660.cfg b/example/nn-train/test/HeH+/d0660.cfg new file mode 100644 index 0000000..267289f --- /dev/null +++ b/example/nn-train/test/HeH+/d0660.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0660/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0660.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0660 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0700.cfg b/example/nn-train/test/HeH+/d0700.cfg new file mode 100644 index 0000000..d5e18da --- /dev/null +++ b/example/nn-train/test/HeH+/d0700.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0700/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0700.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0700 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0740.cfg b/example/nn-train/test/HeH+/d0740.cfg new file mode 100644 index 0000000..684a1de --- /dev/null +++ b/example/nn-train/test/HeH+/d0740.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0740/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0740.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0740 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0780.cfg b/example/nn-train/test/HeH+/d0780.cfg new file mode 100644 index 0000000..fc38770 --- /dev/null +++ b/example/nn-train/test/HeH+/d0780.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0780/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0780.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0780 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0820.cfg b/example/nn-train/test/HeH+/d0820.cfg new file mode 100644 index 0000000..af5a71d --- /dev/null +++ b/example/nn-train/test/HeH+/d0820.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0820/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0820.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0820 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0860.cfg b/example/nn-train/test/HeH+/d0860.cfg new file mode 100644 index 0000000..3f00753 --- /dev/null +++ b/example/nn-train/test/HeH+/d0860.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0860/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0860.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0860 + +constrain: none diff --git a/example/nn-train/test/HeH+/d0900.cfg b/example/nn-train/test/HeH+/d0900.cfg new file mode 100644 index 0000000..f7a8fc5 --- /dev/null +++ b/example/nn-train/test/HeH+/d0900.cfg @@ -0,0 +1,15 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/test/HeH+/d0900/test.log +verbose: False +data_path: %(prefix)s/dataset/HeH+/d0900.npy +model: CNN_GGA_1 +restart: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 +batch_size: 1 +loss_function: MSELoss +optimiser: SGD +test_set_size: 4920 +enable_cuda: True +output_path: %(prefix)s/test/HeH+/d0900 + +constrain: none diff --git a/example/nn-train/train/train.cfg b/example/nn-train/train/train.cfg new file mode 100644 index 0000000..2e6879c --- /dev/null +++ b/example/nn-train/train/train.cfg @@ -0,0 +1,16 @@ +[OPTIONS] +prefix: nn-train +log_path: %(prefix)s/train/train.log +verbose: False +data_path: %(prefix)s/dataset/H2-HeH+_0.9_9.npy +model: CNN_GGA_1_zsym +model_save_path: %(prefix)s/train/model_chk/H2-HeH+_0.9_0_CNN_GGA_1.dat +batch_size: 200 +max_epoch: 200000 +learning_rate: 5e-3 +loss_function: MSELoss_zsym +optimiser: SGD +train_set_size: 78800 +validate_set_size: 19600 +enable_cuda: True +constrain: zsym diff --git a/example/oep-wy/config/H2/d0500.cfg b/example/oep-wy/config/H2/d0500.cfg new file mode 100644 index 0000000..f6edff8 --- /dev/null +++ b/example/oep-wy/config/H2/d0500.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0500.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0500 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0500 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0540.cfg b/example/oep-wy/config/H2/d0540.cfg new file mode 100644 index 0000000..8781927 --- /dev/null +++ b/example/oep-wy/config/H2/d0540.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0540.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0540 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0540 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0580.cfg b/example/oep-wy/config/H2/d0580.cfg new file mode 100644 index 0000000..a5478c3 --- /dev/null +++ b/example/oep-wy/config/H2/d0580.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0580.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0580 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0580 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0620.cfg b/example/oep-wy/config/H2/d0620.cfg new file mode 100644 index 0000000..e998555 --- /dev/null +++ b/example/oep-wy/config/H2/d0620.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0620.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0620 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0620 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0660.cfg b/example/oep-wy/config/H2/d0660.cfg new file mode 100644 index 0000000..4720b6e --- /dev/null +++ b/example/oep-wy/config/H2/d0660.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0660.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0660 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0660 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0700.cfg b/example/oep-wy/config/H2/d0700.cfg new file mode 100644 index 0000000..d6d4161 --- /dev/null +++ b/example/oep-wy/config/H2/d0700.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0700.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0700 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0700 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0740.cfg b/example/oep-wy/config/H2/d0740.cfg new file mode 100644 index 0000000..40466b2 --- /dev/null +++ b/example/oep-wy/config/H2/d0740.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0740.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0740 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0740 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0780.cfg b/example/oep-wy/config/H2/d0780.cfg new file mode 100644 index 0000000..4de2aa7 --- /dev/null +++ b/example/oep-wy/config/H2/d0780.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0780.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0780 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0780 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0820.cfg b/example/oep-wy/config/H2/d0820.cfg new file mode 100644 index 0000000..7cee431 --- /dev/null +++ b/example/oep-wy/config/H2/d0820.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0820.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0820 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0820 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0860.cfg b/example/oep-wy/config/H2/d0860.cfg new file mode 100644 index 0000000..4eabe95 --- /dev/null +++ b/example/oep-wy/config/H2/d0860.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0860.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0860 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0860 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/d0900.cfg b/example/oep-wy/config/H2/d0900.cfg new file mode 100644 index 0000000..1ef7fb5 --- /dev/null +++ b/example/oep-wy/config/H2/d0900.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/H2/d0900.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/H2/d0900 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/H2 +OutputName = d0900 +Symmetric = xz + diff --git a/example/oep-wy/config/H2/write_cfg.py b/example/oep-wy/config/H2/write_cfg.py new file mode 100644 index 0000000..5b267ff --- /dev/null +++ b/example/oep-wy/config/H2/write_cfg.py @@ -0,0 +1,33 @@ + +def write_cfg(fp, index): + fp.write('[OEP]\n') + fp.write('InputDensity = none\n') + fp.write('Structure = structure/H2/d%s.str\n' % (index)) + fp.write('OrbitalBasis = aug-cc-pvqz\n') + fp.write('PotentialBasis = aug-cc-pvqz\n') + fp.write('ReferencePotential = hfx\n') + fp.write('PotentialCoefficientInit = zeros\n') + fp.write('\n') + fp.write('CheckPointPath = oep-wy/chk/H2/d%s\n' % (index)) + fp.write('\n') + fp.write('ConvergenceCriterion = 1.e-12\n') + fp.write('SVDCutoff = 5.e-6\n') + fp.write('LambdaRegulation = 0\n') + fp.write('ZeroForceConstrain = false\n') + fp.write('RealSpaceAnalysis = true\n') + fp.write('\n\n') + fp.write('[DATASET]\n') + fp.write('MeshLevel = 3\n') + fp.write('CubeLength = 0.9\n') + fp.write('CubePoint = 9\n') + fp.write('OutputPath = oep-wy/dataset/H2\n') + fp.write('OutputName = d%s\n' % (index)) + fp.write('Symmetric = xz\n') + fp.write('\n') + + +dis = range(500, 901, 40) +for d in dis: + index = '%04d' % (d) + with open('d%s.cfg' % (index), 'w') as fp: + write_cfg(fp, index) diff --git a/example/oep-wy/config/HeH+/d0500.cfg b/example/oep-wy/config/HeH+/d0500.cfg new file mode 100644 index 0000000..584ed95 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0500.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0500.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0500 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0500 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0540.cfg b/example/oep-wy/config/HeH+/d0540.cfg new file mode 100644 index 0000000..0419f3c --- /dev/null +++ b/example/oep-wy/config/HeH+/d0540.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0540.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0540 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0540 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0580.cfg b/example/oep-wy/config/HeH+/d0580.cfg new file mode 100644 index 0000000..dbdb3b1 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0580.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0580.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0580 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0580 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0620.cfg b/example/oep-wy/config/HeH+/d0620.cfg new file mode 100644 index 0000000..217da86 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0620.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0620.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0620 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0620 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0660.cfg b/example/oep-wy/config/HeH+/d0660.cfg new file mode 100644 index 0000000..d447b92 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0660.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0660.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0660 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0660 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0700.cfg b/example/oep-wy/config/HeH+/d0700.cfg new file mode 100644 index 0000000..f72d5c6 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0700.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0700.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0700 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0700 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0740.cfg b/example/oep-wy/config/HeH+/d0740.cfg new file mode 100644 index 0000000..f07e768 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0740.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0740.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0740 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0740 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0780.cfg b/example/oep-wy/config/HeH+/d0780.cfg new file mode 100644 index 0000000..d728f15 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0780.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0780.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0780 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0780 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0820.cfg b/example/oep-wy/config/HeH+/d0820.cfg new file mode 100644 index 0000000..d085af1 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0820.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0820.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0820 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0820 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0860.cfg b/example/oep-wy/config/HeH+/d0860.cfg new file mode 100644 index 0000000..95e3479 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0860.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0860.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0860 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0860 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/d0900.cfg b/example/oep-wy/config/HeH+/d0900.cfg new file mode 100644 index 0000000..05fba37 --- /dev/null +++ b/example/oep-wy/config/HeH+/d0900.cfg @@ -0,0 +1,25 @@ +[OEP] +InputDensity = none +Structure = structure/HeH+/d0900.str +OrbitalBasis = aug-cc-pvqz +PotentialBasis = aug-cc-pvqz +ReferencePotential = hfx +PotentialCoefficientInit = zeros + +CheckPointPath = oep-wy/chk/HeH+/d0900 + +ConvergenceCriterion = 1.e-12 +SVDCutoff = 5.e-6 +LambdaRegulation = 0 +ZeroForceConstrain = false +RealSpaceAnalysis = true + + +[DATASET] +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +OutputPath = oep-wy/dataset/HeH+ +OutputName = d0900 +Symmetric = xz + diff --git a/example/oep-wy/config/HeH+/write_cfg.py b/example/oep-wy/config/HeH+/write_cfg.py new file mode 100644 index 0000000..15de569 --- /dev/null +++ b/example/oep-wy/config/HeH+/write_cfg.py @@ -0,0 +1,33 @@ + +def write_cfg(fp, index): + fp.write('[OEP]\n') + fp.write('InputDensity = none\n') + fp.write('Structure = structure/HeH+/d%s.str\n' % (index)) + fp.write('OrbitalBasis = aug-cc-pvqz\n') + fp.write('PotentialBasis = aug-cc-pvqz\n') + fp.write('ReferencePotential = hfx\n') + fp.write('PotentialCoefficientInit = zeros\n') + fp.write('\n') + fp.write('CheckPointPath = oep-wy/chk/HeH+/d%s\n' % (index)) + fp.write('\n') + fp.write('ConvergenceCriterion = 1.e-12\n') + fp.write('SVDCutoff = 5.e-6\n') + fp.write('LambdaRegulation = 0\n') + fp.write('ZeroForceConstrain = false\n') + fp.write('RealSpaceAnalysis = true\n') + fp.write('\n\n') + fp.write('[DATASET]\n') + fp.write('MeshLevel = 3\n') + fp.write('CubeLength = 0.9\n') + fp.write('CubePoint = 9\n') + fp.write('OutputPath = oep-wy/dataset/HeH+\n') + fp.write('OutputName = d%s\n' % (index)) + fp.write('Symmetric = xz\n') + fp.write('\n') + + +dis = range(500, 901, 40) +for d in dis: + index = '%04d' % (d) + with open('d%s.cfg' % (index), 'w') as fp: + write_cfg(fp, index) diff --git a/example/run_oep.py b/example/run_oep.py new file mode 100644 index 0000000..00b1da3 --- /dev/null +++ b/example/run_oep.py @@ -0,0 +1,42 @@ +import os, os.path +import numpy as np +from tqdm import tqdm + +PYTHON = '/home/yizhou/anaconda2/envs/py37/bin/python' +SCRIPT = '../oep-wy/main.py' +CFG_PATH = 'oep-wy/config' +LOG_PATH = 'oep-wy/log' +# 01;37m light white + + +def run(task_index, molecule): + os.system('%s %s %s/%s/%s.cfg 1>%s/%s/%s.log 2>%s/%s/%s.err' % ( + PYTHON, SCRIPT, + CFG_PATH, molecule, task_index, + LOG_PATH, molecule, task_index, + LOG_PATH, molecule, task_index)) + + +def main(): + print('====Task starts====') + os.system('mkdir -pv %s/H2 %s/HeH+' % (LOG_PATH, LOG_PATH)) + + tasks_range = range(500, 901, 40) + tasks = np.array(['d%04d' % (i) for i in tasks_range]) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + pbar.set_description('H2/%s' % (task)) + run(task, 'H2') + pbar.update(1) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + pbar.set_description('HeH+/%s' % (task)) + run(task, 'HeH+') + pbar.update(1) + + print('\n====Task completed====') + +if __name__ == '__main__': + main() diff --git a/example/run_test.py b/example/run_test.py new file mode 100644 index 0000000..cd5d881 --- /dev/null +++ b/example/run_test.py @@ -0,0 +1,39 @@ +import os, os.path +import numpy as np +from tqdm import tqdm + +PYTHON = '/home/yizhou/anaconda2/envs/pytorch/bin/python' +SCRIPT = '../nn-train/test.py' +CFG_PATH = 'nn-train/test' +LOG_PATH = 'nn-train/test' + +def run(task_index, molecule): + os.system('CUDA_VISIBLE_DEVICES=0 %s %s %s/%s/%s.cfg' % ( + PYTHON, SCRIPT, + CFG_PATH, molecule, task_index)) + + +def main(): + print('====Task starts====') + + tasks_range = range(500, 901, 40)[0:1] + tasks = np.array(['d%04d' % (i) for i in tasks_range]) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + os.system('mkdir -pv %s/H2/%s' % (LOG_PATH, task)) + pbar.set_description('H2/%s' % (task)) + run(task, 'H2') + pbar.update(1) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + os.system('mkdir -pv %s/HeH+/%s' % (LOG_PATH, task)) + pbar.set_description('HeH+/%s' % (task)) + run(task, 'HeH+') + pbar.update(1) + + print('\n====Task completed====') + +if __name__ == '__main__': + main() diff --git a/example/run_train.py b/example/run_train.py new file mode 100644 index 0000000..7974e12 --- /dev/null +++ b/example/run_train.py @@ -0,0 +1,15 @@ +from __future__ import print_function +import os, os.path + +PYTHON = "/home/yizhou/anaconda2/envs/pytorch/bin/python" +SCRIPT = "../nn-train/main.py" +CFG_PATH = "nn-train/train/train.cfg" + + +cmd = "ln -sv oep-wy/dataset nn-train/" +os.system(cmd) + +cmd = "CUDA_VISIBLE_DEVICES=1 %s %s %s" % (PYTHON, SCRIPT, CFG_PATH) +print(cmd) +os.system(cmd) + diff --git a/example/run_xcnn.py b/example/run_xcnn.py new file mode 100644 index 0000000..1e0e7bf --- /dev/null +++ b/example/run_xcnn.py @@ -0,0 +1,42 @@ +import os, os.path +import numpy as np +from tqdm import tqdm + +PYTHON = '/home/yizhou/anaconda2/envs/py37/bin/python' +SCRIPT = '../xcnn/main.py' +CFG_PATH = 'xcnn/config' +LOG_PATH = 'xcnn/log' +# 01;37m light white + + +def run(task_index, molecule): + os.system('CUDA_VISIBLE_DEVICES=0 %s %s %s/%s/%s.cfg 1>%s/%s/%s.log 2>%s/%s/%s.err' % ( + PYTHON, SCRIPT, + CFG_PATH, molecule, task_index, + LOG_PATH, molecule, task_index, + LOG_PATH, molecule, task_index)) + + +def main(): + print('====Task starts====') + os.system('mkdir -pv %s/H2 %s/HeH+' % (LOG_PATH, LOG_PATH)) + + tasks_range = range(500, 901, 40)[0:1] + tasks = np.array(['d%04d' % (i) for i in tasks_range]) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + pbar.set_description('H2/%s' % (task)) + run(task, 'H2') + pbar.update(1) + + with tqdm(total=len(tasks)) as pbar: + for i, task in enumerate(tasks): + pbar.set_description('HeH+/%s' % (task)) + run(task, 'HeH+') + pbar.update(1) + + print('\n====Task completed====') + +if __name__ == '__main__': + main() diff --git a/example/structure/H2/d0500.str b/example/structure/H2/d0500.str new file mode 100644 index 0000000..d3d232f --- /dev/null +++ b/example/structure/H2/d0500.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.25000 +H 0 0 -0.25000 +0 0 + +# H2 distance = 0.50000 + diff --git a/example/structure/H2/d0520.str b/example/structure/H2/d0520.str new file mode 100644 index 0000000..c4ea805 --- /dev/null +++ b/example/structure/H2/d0520.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.26000 +H 0 0 -0.26000 +0 0 + +# H2 distance = 0.52000 + diff --git a/example/structure/H2/d0540.str b/example/structure/H2/d0540.str new file mode 100644 index 0000000..99f3860 --- /dev/null +++ b/example/structure/H2/d0540.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.27000 +H 0 0 -0.27000 +0 0 + +# H2 distance = 0.54000 + diff --git a/example/structure/H2/d0560.str b/example/structure/H2/d0560.str new file mode 100644 index 0000000..660aecf --- /dev/null +++ b/example/structure/H2/d0560.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.28000 +H 0 0 -0.28000 +1 0 + +# HHe+ distance = 0.56000 + diff --git a/example/structure/H2/d0580.str b/example/structure/H2/d0580.str new file mode 100644 index 0000000..68aeafd --- /dev/null +++ b/example/structure/H2/d0580.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.29000 +H 0 0 -0.29000 +0 0 + +# H2 distance = 0.58000 + diff --git a/example/structure/H2/d0600.str b/example/structure/H2/d0600.str new file mode 100644 index 0000000..852c3a9 --- /dev/null +++ b/example/structure/H2/d0600.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.30000 +H 0 0 -0.30000 +1 0 + +# HHe+ distance = 0.60000 + diff --git a/example/structure/H2/d0620.str b/example/structure/H2/d0620.str new file mode 100644 index 0000000..26988c0 --- /dev/null +++ b/example/structure/H2/d0620.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.31000 +H 0 0 -0.31000 +0 0 + +# H2 distance = 0.62000 + diff --git a/example/structure/H2/d0640.str b/example/structure/H2/d0640.str new file mode 100644 index 0000000..0e6769f --- /dev/null +++ b/example/structure/H2/d0640.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.32000 +H 0 0 -0.32000 +1 0 + +# HHe+ distance = 0.64000 + diff --git a/example/structure/H2/d0660.str b/example/structure/H2/d0660.str new file mode 100644 index 0000000..13d641a --- /dev/null +++ b/example/structure/H2/d0660.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.33000 +H 0 0 -0.33000 +0 0 + +# H2 distance = 0.66000 + diff --git a/example/structure/H2/d0680.str b/example/structure/H2/d0680.str new file mode 100644 index 0000000..b1448d6 --- /dev/null +++ b/example/structure/H2/d0680.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.34000 +H 0 0 -0.34000 +1 0 + +# HHe+ distance = 0.68000 + diff --git a/example/structure/H2/d0700.str b/example/structure/H2/d0700.str new file mode 100644 index 0000000..f3a6097 --- /dev/null +++ b/example/structure/H2/d0700.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.35000 +H 0 0 -0.35000 +0 0 + +# H2 distance = 0.70000 + diff --git a/example/structure/H2/d0720.str b/example/structure/H2/d0720.str new file mode 100644 index 0000000..2357afc --- /dev/null +++ b/example/structure/H2/d0720.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.36000 +H 0 0 -0.36000 +1 0 + +# HHe+ distance = 0.72000 + diff --git a/example/structure/H2/d0740.str b/example/structure/H2/d0740.str new file mode 100644 index 0000000..8f0f796 --- /dev/null +++ b/example/structure/H2/d0740.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.37000 +H 0 0 -0.37000 +0 0 + +# H2 distance = 0.74000 + diff --git a/example/structure/H2/d0760.str b/example/structure/H2/d0760.str new file mode 100644 index 0000000..bc5da38 --- /dev/null +++ b/example/structure/H2/d0760.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.38000 +H 0 0 -0.38000 +1 0 + +# HHe+ distance = 0.76000 + diff --git a/example/structure/H2/d0780.str b/example/structure/H2/d0780.str new file mode 100644 index 0000000..8a8ec7c --- /dev/null +++ b/example/structure/H2/d0780.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.39000 +H 0 0 -0.39000 +0 0 + +# H2 distance = 0.78000 + diff --git a/example/structure/H2/d0800.str b/example/structure/H2/d0800.str new file mode 100644 index 0000000..977e0ce --- /dev/null +++ b/example/structure/H2/d0800.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.40000 +H 0 0 -0.40000 +1 0 + +# HHe+ distance = 0.80000 + diff --git a/example/structure/H2/d0820.str b/example/structure/H2/d0820.str new file mode 100644 index 0000000..41e707c --- /dev/null +++ b/example/structure/H2/d0820.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.41000 +H 0 0 -0.41000 +0 0 + +# H2 distance = 0.82000 + diff --git a/example/structure/H2/d0840.str b/example/structure/H2/d0840.str new file mode 100644 index 0000000..d4e6f6b --- /dev/null +++ b/example/structure/H2/d0840.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.42000 +H 0 0 -0.42000 +1 0 + +# HHe+ distance = 0.84000 + diff --git a/example/structure/H2/d0880.str b/example/structure/H2/d0880.str new file mode 100644 index 0000000..e3fb0dd --- /dev/null +++ b/example/structure/H2/d0880.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.44000 +H 0 0 -0.44000 +1 0 + +# HHe+ distance = 0.88000 + diff --git a/example/structure/H2/d0900.str b/example/structure/H2/d0900.str new file mode 100644 index 0000000..156e261 --- /dev/null +++ b/example/structure/H2/d0900.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.45000 +H 0 0 -0.45000 +0 0 + +# H2 distance = 0.90000 + diff --git a/example/structure/HeH+/d0500.str b/example/structure/HeH+/d0500.str new file mode 100644 index 0000000..23f3c45 --- /dev/null +++ b/example/structure/HeH+/d0500.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.25000 +H 0 0 -0.25000 +1 0 + +# HHe+ distance = 0.50000 + diff --git a/example/structure/HeH+/d0520.str b/example/structure/HeH+/d0520.str new file mode 100644 index 0000000..ad8c6c0 --- /dev/null +++ b/example/structure/HeH+/d0520.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.26000 +H 0 0 -0.26000 +1 0 + +# HHe+ distance = 0.52000 + diff --git a/example/structure/HeH+/d0540.str b/example/structure/HeH+/d0540.str new file mode 100644 index 0000000..ed5212d --- /dev/null +++ b/example/structure/HeH+/d0540.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.27000 +H 0 0 -0.27000 +1 0 + +# HHe+ distance = 0.54000 + diff --git a/example/structure/HeH+/d0580.str b/example/structure/HeH+/d0580.str new file mode 100644 index 0000000..84d283b --- /dev/null +++ b/example/structure/HeH+/d0580.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.29000 +H 0 0 -0.29000 +1 0 + +# HHe+ distance = 0.58000 + diff --git a/example/structure/HeH+/d0620.str b/example/structure/HeH+/d0620.str new file mode 100644 index 0000000..fcf6637 --- /dev/null +++ b/example/structure/HeH+/d0620.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.31000 +H 0 0 -0.31000 +1 0 + +# HHe+ distance = 0.62000 + diff --git a/example/structure/HeH+/d0660.str b/example/structure/HeH+/d0660.str new file mode 100644 index 0000000..a62c6d8 --- /dev/null +++ b/example/structure/HeH+/d0660.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.33000 +H 0 0 -0.33000 +1 0 + +# HHe+ distance = 0.66000 + diff --git a/example/structure/HeH+/d0700.str b/example/structure/HeH+/d0700.str new file mode 100644 index 0000000..fadf37f --- /dev/null +++ b/example/structure/HeH+/d0700.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.35000 +H 0 0 -0.35000 +1 0 + +# HHe+ distance = 0.70000 + diff --git a/example/structure/HeH+/d0740.str b/example/structure/HeH+/d0740.str new file mode 100644 index 0000000..38dc943 --- /dev/null +++ b/example/structure/HeH+/d0740.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.37000 +H 0 0 -0.37000 +1 0 + +# HHe+ distance = 0.74000 + diff --git a/example/structure/HeH+/d0780.str b/example/structure/HeH+/d0780.str new file mode 100644 index 0000000..c86a6e3 --- /dev/null +++ b/example/structure/HeH+/d0780.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.39000 +H 0 0 -0.39000 +1 0 + +# HHe+ distance = 0.78000 + diff --git a/example/structure/HeH+/d0820.str b/example/structure/HeH+/d0820.str new file mode 100644 index 0000000..fb80c4c --- /dev/null +++ b/example/structure/HeH+/d0820.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.41000 +H 0 0 -0.41000 +1 0 + +# HHe+ distance = 0.82000 + diff --git a/example/structure/HeH+/d0880.str b/example/structure/HeH+/d0880.str new file mode 100644 index 0000000..e3fb0dd --- /dev/null +++ b/example/structure/HeH+/d0880.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.44000 +H 0 0 -0.44000 +1 0 + +# HHe+ distance = 0.88000 + diff --git a/example/structure/HeH+/d0900.str b/example/structure/HeH+/d0900.str new file mode 100644 index 0000000..7773409 --- /dev/null +++ b/example/structure/HeH+/d0900.str @@ -0,0 +1,7 @@ +2 +He 0 0 +0.45000 +H 0 0 -0.45000 +1 0 + +# HHe+ distance = 0.90000 + diff --git a/example/xcnn/config/H2/d0500.cfg b/example/xcnn/config/H2/d0500.cfg new file mode 100644 index 0000000..ae5fc77 --- /dev/null +++ b/example/xcnn/config/H2/d0500.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0500 +EnableCuda = True + +Structure = structure/H2/d0500.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0520.cfg b/example/xcnn/config/H2/d0520.cfg new file mode 100644 index 0000000..f6e616c --- /dev/null +++ b/example/xcnn/config/H2/d0520.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0520 +EnableCuda = True + +Structure = structure/H2/d0520.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0540.cfg b/example/xcnn/config/H2/d0540.cfg new file mode 100644 index 0000000..7451d46 --- /dev/null +++ b/example/xcnn/config/H2/d0540.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0540 +EnableCuda = True + +Structure = structure/H2/d0540.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0560.cfg b/example/xcnn/config/H2/d0560.cfg new file mode 100644 index 0000000..a1f162b --- /dev/null +++ b/example/xcnn/config/H2/d0560.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0560 +EnableCuda = True + +Structure = structure/H2/d0560.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0580.cfg b/example/xcnn/config/H2/d0580.cfg new file mode 100644 index 0000000..496b392 --- /dev/null +++ b/example/xcnn/config/H2/d0580.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0580 +EnableCuda = True + +Structure = structure/H2/d0580.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0600.cfg b/example/xcnn/config/H2/d0600.cfg new file mode 100644 index 0000000..0f08ac0 --- /dev/null +++ b/example/xcnn/config/H2/d0600.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0600 +EnableCuda = True + +Structure = structure/H2/d0600.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0620.cfg b/example/xcnn/config/H2/d0620.cfg new file mode 100644 index 0000000..1ae8502 --- /dev/null +++ b/example/xcnn/config/H2/d0620.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0620 +EnableCuda = True + +Structure = structure/H2/d0620.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0640.cfg b/example/xcnn/config/H2/d0640.cfg new file mode 100644 index 0000000..c6b76af --- /dev/null +++ b/example/xcnn/config/H2/d0640.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0640 +EnableCuda = True + +Structure = structure/H2/d0640.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0660.cfg b/example/xcnn/config/H2/d0660.cfg new file mode 100644 index 0000000..15407cf --- /dev/null +++ b/example/xcnn/config/H2/d0660.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0660 +EnableCuda = True + +Structure = structure/H2/d0660.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0680.cfg b/example/xcnn/config/H2/d0680.cfg new file mode 100644 index 0000000..39556ca --- /dev/null +++ b/example/xcnn/config/H2/d0680.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0680 +EnableCuda = True + +Structure = structure/H2/d0680.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0700.cfg b/example/xcnn/config/H2/d0700.cfg new file mode 100644 index 0000000..c2d3cf3 --- /dev/null +++ b/example/xcnn/config/H2/d0700.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0700 +EnableCuda = True + +Structure = structure/H2/d0700.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0720.cfg b/example/xcnn/config/H2/d0720.cfg new file mode 100644 index 0000000..7c8178c --- /dev/null +++ b/example/xcnn/config/H2/d0720.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0720 +EnableCuda = True + +Structure = structure/H2/d0720.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0740.cfg b/example/xcnn/config/H2/d0740.cfg new file mode 100644 index 0000000..08a0777 --- /dev/null +++ b/example/xcnn/config/H2/d0740.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0740 +EnableCuda = True + +Structure = structure/H2/d0740.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0760.cfg b/example/xcnn/config/H2/d0760.cfg new file mode 100644 index 0000000..34b3d0f --- /dev/null +++ b/example/xcnn/config/H2/d0760.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0760 +EnableCuda = True + +Structure = structure/H2/d0760.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0780.cfg b/example/xcnn/config/H2/d0780.cfg new file mode 100644 index 0000000..7ba1dca --- /dev/null +++ b/example/xcnn/config/H2/d0780.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0780 +EnableCuda = True + +Structure = structure/H2/d0780.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0800.cfg b/example/xcnn/config/H2/d0800.cfg new file mode 100644 index 0000000..8af2106 --- /dev/null +++ b/example/xcnn/config/H2/d0800.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0800 +EnableCuda = True + +Structure = structure/H2/d0800.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0820.cfg b/example/xcnn/config/H2/d0820.cfg new file mode 100644 index 0000000..5f46314 --- /dev/null +++ b/example/xcnn/config/H2/d0820.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0820 +EnableCuda = True + +Structure = structure/H2/d0820.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0840.cfg b/example/xcnn/config/H2/d0840.cfg new file mode 100644 index 0000000..a957073 --- /dev/null +++ b/example/xcnn/config/H2/d0840.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0840 +EnableCuda = True + +Structure = structure/H2/d0840.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0860.cfg b/example/xcnn/config/H2/d0860.cfg new file mode 100644 index 0000000..0738a00 --- /dev/null +++ b/example/xcnn/config/H2/d0860.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0860 +EnableCuda = True + +Structure = structure/H2/d0860.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0880.cfg b/example/xcnn/config/H2/d0880.cfg new file mode 100644 index 0000000..d74b03e --- /dev/null +++ b/example/xcnn/config/H2/d0880.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0880 +EnableCuda = True + +Structure = structure/H2/d0880.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/H2/d0900.cfg b/example/xcnn/config/H2/d0900.cfg new file mode 100644 index 0000000..d348bd0 --- /dev/null +++ b/example/xcnn/config/H2/d0900.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/H2/d0900 +EnableCuda = True + +Structure = structure/H2/d0900.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz+ + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0500.cfg b/example/xcnn/config/HeH+/d0500.cfg new file mode 100644 index 0000000..7454eb3 --- /dev/null +++ b/example/xcnn/config/HeH+/d0500.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0500 +EnableCuda = True + +Structure = structure/HeH+/d0500.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0520.cfg b/example/xcnn/config/HeH+/d0520.cfg new file mode 100644 index 0000000..4a69482 --- /dev/null +++ b/example/xcnn/config/HeH+/d0520.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0520 +EnableCuda = True + +Structure = structure/HeH+/d0520.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0540.cfg b/example/xcnn/config/HeH+/d0540.cfg new file mode 100644 index 0000000..f6b7202 --- /dev/null +++ b/example/xcnn/config/HeH+/d0540.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0540 +EnableCuda = True + +Structure = structure/HeH+/d0540.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0560.cfg b/example/xcnn/config/HeH+/d0560.cfg new file mode 100644 index 0000000..4aa96c6 --- /dev/null +++ b/example/xcnn/config/HeH+/d0560.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0560 +EnableCuda = True + +Structure = structure/HeH+/d0560.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0580.cfg b/example/xcnn/config/HeH+/d0580.cfg new file mode 100644 index 0000000..a63cb11 --- /dev/null +++ b/example/xcnn/config/HeH+/d0580.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0580 +EnableCuda = True + +Structure = structure/HeH+/d0580.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0600.cfg b/example/xcnn/config/HeH+/d0600.cfg new file mode 100644 index 0000000..8303415 --- /dev/null +++ b/example/xcnn/config/HeH+/d0600.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0600 +EnableCuda = True + +Structure = structure/HeH+/d0600.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0620.cfg b/example/xcnn/config/HeH+/d0620.cfg new file mode 100644 index 0000000..4889c61 --- /dev/null +++ b/example/xcnn/config/HeH+/d0620.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0620 +EnableCuda = True + +Structure = structure/HeH+/d0620.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0640.cfg b/example/xcnn/config/HeH+/d0640.cfg new file mode 100644 index 0000000..7f0fcad --- /dev/null +++ b/example/xcnn/config/HeH+/d0640.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0640 +EnableCuda = True + +Structure = structure/HeH+/d0640.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0660.cfg b/example/xcnn/config/HeH+/d0660.cfg new file mode 100644 index 0000000..f5b40f2 --- /dev/null +++ b/example/xcnn/config/HeH+/d0660.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0660 +EnableCuda = True + +Structure = structure/HeH+/d0660.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0680.cfg b/example/xcnn/config/HeH+/d0680.cfg new file mode 100644 index 0000000..368944a --- /dev/null +++ b/example/xcnn/config/HeH+/d0680.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0680 +EnableCuda = True + +Structure = structure/HeH+/d0680.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0700.cfg b/example/xcnn/config/HeH+/d0700.cfg new file mode 100644 index 0000000..fce8fd7 --- /dev/null +++ b/example/xcnn/config/HeH+/d0700.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0700 +EnableCuda = True + +Structure = structure/HeH+/d0700.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0720.cfg b/example/xcnn/config/HeH+/d0720.cfg new file mode 100644 index 0000000..8a1c786 --- /dev/null +++ b/example/xcnn/config/HeH+/d0720.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0720 +EnableCuda = True + +Structure = structure/HeH+/d0720.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0740.cfg b/example/xcnn/config/HeH+/d0740.cfg new file mode 100644 index 0000000..40d3b26 --- /dev/null +++ b/example/xcnn/config/HeH+/d0740.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0740 +EnableCuda = True + +Structure = structure/HeH+/d0740.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0760.cfg b/example/xcnn/config/HeH+/d0760.cfg new file mode 100644 index 0000000..72933f4 --- /dev/null +++ b/example/xcnn/config/HeH+/d0760.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0760 +EnableCuda = True + +Structure = structure/HeH+/d0760.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0780.cfg b/example/xcnn/config/HeH+/d0780.cfg new file mode 100644 index 0000000..547ce12 --- /dev/null +++ b/example/xcnn/config/HeH+/d0780.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0780 +EnableCuda = True + +Structure = structure/HeH+/d0780.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0800.cfg b/example/xcnn/config/HeH+/d0800.cfg new file mode 100644 index 0000000..d5bec1c --- /dev/null +++ b/example/xcnn/config/HeH+/d0800.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0800 +EnableCuda = True + +Structure = structure/HeH+/d0800.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0820.cfg b/example/xcnn/config/HeH+/d0820.cfg new file mode 100644 index 0000000..055d40e --- /dev/null +++ b/example/xcnn/config/HeH+/d0820.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0820 +EnableCuda = True + +Structure = structure/HeH+/d0820.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0840.cfg b/example/xcnn/config/HeH+/d0840.cfg new file mode 100644 index 0000000..defebc9 --- /dev/null +++ b/example/xcnn/config/HeH+/d0840.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0840 +EnableCuda = True + +Structure = structure/HeH+/d0840.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0860.cfg b/example/xcnn/config/HeH+/d0860.cfg new file mode 100644 index 0000000..b74076d --- /dev/null +++ b/example/xcnn/config/HeH+/d0860.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0860 +EnableCuda = True + +Structure = structure/HeH+/d0860.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0880.cfg b/example/xcnn/config/HeH+/d0880.cfg new file mode 100644 index 0000000..38d1db6 --- /dev/null +++ b/example/xcnn/config/HeH+/d0880.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0880 +EnableCuda = True + +Structure = structure/HeH+/d0880.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/config/HeH+/d0900.cfg b/example/xcnn/config/HeH+/d0900.cfg new file mode 100644 index 0000000..fd4bd0c --- /dev/null +++ b/example/xcnn/config/HeH+/d0900.cfg @@ -0,0 +1,22 @@ +[XCNN] +Verbose = True +CheckPointPath = xcnn/chk/HeH+/d0900 +EnableCuda = True + +Structure = structure/HeH+/d0900.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = xcnn/saved_model/H2-HeH+_0.9_0_CNN_GGA_1.dat.restart10000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +InitDensityMatrix = rks +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True diff --git a/example/xcnn/saved_model/H2-HeH+_CNN_GGA_1_0.504-0.896-0.008_HFX_ll_0.9_9.dat b/example/xcnn/saved_model/H2-HeH+_CNN_GGA_1_0.504-0.896-0.008_HFX_ll_0.9_9.dat new file mode 100644 index 0000000..53eadf2 Binary files /dev/null and b/example/xcnn/saved_model/H2-HeH+_CNN_GGA_1_0.504-0.896-0.008_HFX_ll_0.9_9.dat differ diff --git a/nn-train/Config.py b/nn-train/Config.py new file mode 100644 index 0000000..c4832e6 --- /dev/null +++ b/nn-train/Config.py @@ -0,0 +1,83 @@ +try: + import ConfigParser +except: + import configparser as ConfigParser + +import datetime + +def load_default_options(): + options = dict() + # logger + options["log_path"] = "AUTO" + options["verbose"] = "True" + options["stat_panel"] = "False" + + # data + options["data_path"] = "data.npy" + options["shuffle"] = "True" + options["num_workers"] = 1 + options["input_channel"] = 4 + + # NN parameter + options["batch_size"] = 200 + options["max_epoch"] = 1000 + options["learning_rate"] = 1e-4 + options["loss_function"] = "MSELoss" + options["optimiser"] = "SGD" + + # model + options["model_save_path"] = "saved_model" + options["enable_cuda"] = "False" + + return options + +def get_options(config_file): + config = ConfigParser.ConfigParser() + config.read(config_file) + options = load_default_options() + section = config.sections()[0] + for o in config.options(section): + options[o] = config.get(section, o) + + parse(options) + return options + +def parse(options): + if options["log_path"] == "AUTO": + options["log_path"] = "log/%s_%s_%s.log" % (options["model"], str(datetime.date.today()), str(datetime.datetime.now().time())) + + if options["verbose"].lower() == "true": + options["verbose"] = True + else: + options["verbose"] = False + + if options["stat_panel"].lower() == "true": + options["stat_panel"] = True + else: + options["stat_panel"] = False + + + # data + if "train_set_size" in options.keys(): + options["train_set_size"] = int(options["train_set_size"]) + if "validate_set_size" in options.keys(): + options["validate_set_size"] = int(options["validate_set_size"]) + if "test_set_size" in options.keys(): + options["test_set_size"] = int(options["test_set_size"]) + if options["shuffle"].lower() == "true": + options["shuffle"] = True + else: + options["shuffle"] = False + options["num_workers"] = int(options["num_workers"]) + options["input_channel"] = int(options["input_channel"]) + + # NN parameter + options["batch_size"] = int(options["batch_size"]) + options["max_epoch"] = int(options["max_epoch"]) + options["learning_rate"] = float(options["learning_rate"]) + + # model + if not options["model_save_path"].endswith(".dat"): + options["model_save_path"] = "%s/%s_%s_%s.dat" % (options["model_save_path"], options["model"], str(datetime.date.today()), str(datetime.datetime.now().time())) + options["enable_cuda"] = (options["enable_cuda"].lower() == "true") + diff --git a/nn-train/const_list.py b/nn-train/const_list.py new file mode 100644 index 0000000..7aa2b51 --- /dev/null +++ b/nn-train/const_list.py @@ -0,0 +1,42 @@ +from model import * +from loss import * + +import torch.optim as optim +import torch.nn as nn + +MODEL_LIST = { + # "cnn_lda_0": CNN_LDA_0, + # "cnn_gga_0": CNN_GGA_0, + "cnn_gga_1": CNN_GGA_1, + "cnn_gga_1_zsym": CNN_GGA_1_zsym, + # "cnn_gga_2": CNN_GGA_2, + # "cnn_gga_2_zsym": CNN_GGA_2_zsym, + # "cnn_gga_3": CNN_GGA_3, + # "cnn_gga_3_zsym": CNN_GGA_3_zsym, + # "cnn_gga_5": CNN_GGA_5, + # "cnn_gga_5_zsym": CNN_GGA_5_zsym, + # "cnn_gga_7": CNN_GGA_7, + # "cnn_gga_7_zsym": CNN_GGA_7_zsym, + + # "cnn_gga_1_sigmoid": CNN_GGA_1_sigmoid, + # "cnn_gga_2_tanh": CNN_GGA_2_tanh, + # "cnn_gga_15_rddm_elu": CNN_GGA_15_rddm_elu, + # "dnn": DNN, + # "cnn_lda_pyramid_9_30": CNN_LDA_pyramid_9_30, + # "cnn_rdg_1": CNN_RDG_1, + # "cnn_rdg_1_zsym": CNN_RDG_1_zsym, + } + +OPTIM_LIST = { + "sgd": optim.SGD, + "dafault": optim.SGD, + } + +LOSS_FUNC_LIST = { + "mseloss": nn.MSELoss, + "rmseloss": RMSELoss, + "wmseloss": WMSELoss, + "default": nn.MSELoss, + "mseloss_zsym": MSELoss_zsym, + } + diff --git a/nn-train/dataset.py b/nn-train/dataset.py new file mode 100644 index 0000000..9ac13ac --- /dev/null +++ b/nn-train/dataset.py @@ -0,0 +1,116 @@ +from math import pow +import numpy as np +import torch +from torch.utils.data import Dataset, DataLoader + +class DensityToPotentialDataset(Dataset): + def __init__(self, raw_data, input_channel=4): + super(DensityToPotentialDataset, self).__init__() + self.data_np = raw_data.astype(np.float32) + self.input_channel = input_channel + + def __len__(self): + return len(self.data_np) + + def __getitem__(self, idx): + if isinstance(idx, slice): + raise ValueError("slice may cause problem in DensityToPotentialDataset.__getitem__()") + data_slice = np.asarray(self.data_np[slice(idx, idx + 1, None)]) + ndim = int(round(pow(float(data_slice.shape[1] - 1) / float(self.input_channel), 1. / 3))) + rho = data_slice[:, :-1].reshape(self.input_channel, ndim, ndim, ndim) + v = data_slice[:, -1] + rho, v = torch.from_numpy(rho), torch.from_numpy(v) + return {"rho": rho, "v": v} + + +class DensityToPotentialDataset_zsym(Dataset): + def __init__(self, raw_data, input_channel=4): + super(DensityToPotentialDataset_zsym, self).__init__() + self.data_np = raw_data + self.input_channel = input_channel + + def __len__(self): + return len(self.data_np) + + def __getitem__(self, idx): + if isinstance(idx, slice): + raise ValueError("slice may cause problem in DensityToPotentialDataset.__getitem__()") + data_slice = np.asarray(self.data_np[slice(idx, idx + 1, None)]) + ndim = int(round(pow(float(data_slice.shape[1] - 1) / float(self.input_channel), 1. / 3))) + + rho_zp = data_slice[:, :-1].reshape(self.input_channel, ndim, ndim, ndim) + rho_zm = np.empty_like(rho_zp) + for ic in range(self.input_channel): + for iz in range(ndim): + rho_zm[ic, :, :, iz] = rho_zp[ic, :, :, -(iz+1)] + rho_zm[-1, :, :, :] *= -1 + + rho = np.array([rho_zp, rho_zm]) + assert(rho.shape == (2, self.input_channel, ndim, ndim, ndim)) + + v = data_slice[:, -1] + rho, v = torch.from_numpy(rho), torch.from_numpy(v) + return {"rho": rho, "v": v} + + +def get_train_and_validate_set(options, toDataLoader=True): + raw_data = np.load(options["data_path"]) + np.random.shuffle(raw_data) + + constrain = options["constrain"] + if constrain.find("zsym") != -1: + train_set = DensityToPotentialDataset_zsym( + raw_data[:options["train_set_size"]], + input_channel=options["input_channel"]) + validate_set = DensityToPotentialDataset_zsym( + raw_data[options["train_set_size"] : options["train_set_size"] + options["validate_set_size"]], + input_channel=options["input_channel"]) + + else: + # constrain == "none" + train_set = DensityToPotentialDataset( + raw_data[:options["train_set_size"]], + input_channel=options["input_channel"]) + validate_set = DensityToPotentialDataset( + raw_data[options["train_set_size"] : options["train_set_size"] + options["validate_set_size"]], + input_channel=options["input_channel"]) + + if not toDataLoader: return train_set, validate_set + + train_set_loader = DataLoader( + train_set, + batch_size=int(options["batch_size"]), + shuffle=options["shuffle"], + num_workers=int(options["num_workers"])) + + validate_set_loader = DataLoader( + validate_set, + batch_size=int(options["batch_size"]), + shuffle=options["shuffle"], + num_workers=int(options["num_workers"])) + + return train_set_loader, validate_set_loader + +def get_test_set(options, toDataLoader=True): + raw_data = np.load(options["data_path"]) + + constrain = options["constrain"] + if constrain.find("zsym") != -1: + test_set = DensityToPotentialDataset_zsym( + raw_data[:options["test_set_size"]], + input_channel=options["input_channel"]) + else: + test_set = DensityToPotentialDataset( + raw_data[:options["test_set_size"]], + input_channel=options["input_channel"]) + + if not toDataLoader: return test_set + + test_set_loader = DataLoader( + test_set, + batch_size=1, + shuffle=False, + num_workers=int(options["num_workers"])) + + return test_set_loader + diff --git a/nn-train/func.py b/nn-train/func.py new file mode 100644 index 0000000..676d03c --- /dev/null +++ b/nn-train/func.py @@ -0,0 +1,123 @@ +import time + +import numpy as np +import torch +from torch.autograd import Variable + +from const_list import MODEL_LIST + +def get_model(model_name): + try: + model = MODEL_LIST[model_name.lower()] + except KeyError: + print("No model named %s" % (model_name.lower())) + exit(1) + else: + pass + return model + +def get_list_item(LIST, key): + try: + result = LIST[key.lower()] + except KeyError: + result = LIST["default"] + else: + pass + return result + +def train(epoch, train_set_loader, model, loss_func, optimiser, logger=None, panel=None, cuda=False): + time_start = time.time() + batch_size = train_set_loader.batch_size + running_loss = 0. + for batch_idx, data in enumerate(train_set_loader): + inputs, targets = data["rho"], data["v"] + if cuda: + inputs, targets = inputs.cuda(), targets.cuda() + inputs, targets = Variable(inputs), Variable(targets) + + optimiser.zero_grad() + + outputs = model(inputs) + loss = loss_func(outputs, targets) + loss.backward() + running_loss += loss.data.item() + + optimiser.step() + + if logger is not None and batch_idx % 50 == 49: + logger.log("train batch %5d: [%5d/%5d]\tloss: %.8e" % + (batch_idx + 1, batch_idx * batch_size, len(train_set_loader.dataset), loss.data.item()), "train") + + if logger is not None: + logger.log("Epoch %5d: average loss on train: %.8e" % + (epoch, running_loss * batch_size / float(len(train_set_loader.dataset))), "train") + logger.log("elapse time: %lf" % (time.time() - time_start), "train") + + return running_loss + +def validate(epoch, validate_set_loader, model, loss_func, logger=None, cuda=False): + time_start = time.time() + batch_size = validate_set_loader.batch_size + running_loss = 0. + for batch_idx, data in enumerate(validate_set_loader): + inputs, targets = data["rho"], data["v"] + if cuda: + inputs, targets = inputs.cuda(), targets.cuda() + inputs, targets = Variable(inputs), Variable(targets) + + outputs = model(inputs) + loss = loss_func(outputs, targets) + running_loss += loss.data.item() + + if logger is not None and batch_idx % 50 == 49: + logger.log("validate batch %5d: [%5d/%5d]\tloss: %.8e" % + (batch_idx + 1, batch_idx * batch_size, len(validate_set_loader.dataset), loss.data.item()), "validate") + + if logger is not None: + logger.log("Epoch %5d: average loss on validate: %.8e" % + (epoch, running_loss * batch_size / float(len(validate_set_loader.dataset))), "validate") + logger.log("elapse time: %lf" % (time.time() - time_start), "validate") + + return running_loss + +def test(test_set_loader, model, loss_func, logger=None, cuda=False): + time_start = time.time() + batch_size = test_set_loader.batch_size # should be 1 + running_loss = np.zeros([len(test_set_loader.dataset)]) + running_output = np.empty(len(test_set_loader.dataset)) + running_target = np.empty(len(test_set_loader.dataset)) + for batch_idx, data in enumerate(test_set_loader): + inputs, targets = data["rho"], data["v"] + if cuda: + inputs, targets = inputs.cuda(), targets.cuda() + inputs, targets = Variable(inputs), Variable(targets) + + outputs = model(inputs) + loss = loss_func(outputs, targets) + if isinstance(outputs, tuple): + outputs = outputs[0] + running_loss[batch_idx] = loss.data.item() + running_output[batch_idx] = outputs.data[0][0] + running_target[batch_idx] = targets.data[0][0] + + if logger is not None: + logger.log("test batch %5d: [%5d/%5d]\tloss: %.8e" % + (batch_idx + 1, batch_idx * batch_size, len(test_set_loader.dataset), loss.data.item()), "test") + + if logger is not None: + logger.log("Average loss on test: %.8e" % + (np.mean(running_loss)), "test") + logger.log("elapse time: %lf" % (time.time() - time_start), "test") + + return running_loss, running_output, running_target + +# IO +def save_model(model, save_path): + torch.save(model.state_dict(), save_path) + +def load_model(model, load_path): + model.load_state_dict(torch.load(load_path)) + +def save_ndarray(target, save_path): + np.save(save_path, target) + diff --git a/nn-train/log_to_file.py b/nn-train/log_to_file.py new file mode 100644 index 0000000..3ab5e2f --- /dev/null +++ b/nn-train/log_to_file.py @@ -0,0 +1,21 @@ +import logging + + +class Logger: + def __init__(self, log_path, to_stdout=False): + logging.basicConfig(filename=log_path, level=logging.INFO) + + if to_stdout: + ch = logging.StreamHandler() + ch.setLevel(logging.INFO) + logging.getLogger().addHandler(ch) + + self.logger = logging.getLogger() + + + def log(self, content, name=None): + if name is None: + self.logger.info("%s" % (content)) + else: + self.logger.info("%s: %s" % (name, content)) + diff --git a/nn-train/loss.py b/nn-train/loss.py new file mode 100644 index 0000000..b500abd --- /dev/null +++ b/nn-train/loss.py @@ -0,0 +1,35 @@ +import torch +import torch.nn as nn + +class RMSELoss(nn.Module): + def __init__(self): + super(RMSELoss, self).__init__() + + def forward(self, output, target): + _pointwise_loss = lambda a, b: ((a - b) / b)**2 + d = _pointwise_loss(output, target) + return torch.mean(d) + +class WMSELoss(nn.Module): + def __init__(self): + super(WMSELoss, self).__init__() + + def forward(self, output, target): + _pointwise_loss = lambda a, b: ((a - b) ** 2) * torch.exp(b) + d = _pointwise_loss(output, target) + return torch.mean(d) + +class MSELoss_zsym(nn.Module): + def __init__(self, coef=1.): + super(MSELoss_zsym, self).__init__() + self.coef = coef + + def forward(self, output, target): + # output contains prediction from two channels. + # true output = (xm + xp) / 2 + # LOSS = MSELoss(true output, target) + c * (xm - xp)**2 + + _pointwise_loss = lambda a, b: ((a[0] + a[1]) / 2. - b)**2 + self.coef * ((a[0] - a[1])**2) + d = _pointwise_loss(output, target) + return torch.mean(d) + diff --git a/nn-train/main.py b/nn-train/main.py new file mode 100644 index 0000000..bbe0480 --- /dev/null +++ b/nn-train/main.py @@ -0,0 +1,74 @@ +from __future__ import print_function +import os, sys +import torch.optim as optim + +from const_list import * +from Config import get_options +from dataset import * +from func import * +from log_to_file import Logger + +def main(): + options = get_options(sys.argv[1]) + + logger = Logger(options["log_path"], to_stdout=options["verbose"]) + logger.log("========Task Start========") + + train_set_loader, validate_set_loader = \ + get_train_and_validate_set(options) + + model = get_model(options["model"])() + if "restart" in options.keys(): + load_model(model, options["restart"]) + if options["enable_cuda"]: + model.cuda() + + if options["loss_function"] == "MSELoss_zsym": + if "zsym_coef" in options.keys(): + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])(float(options["zsym_coef"])) + else: + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])() + else: + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])() + loss_func.size_average = True + + optimiser = get_list_item(OPTIM_LIST, options["optimiser"])(model.parameters(), lr=options["learning_rate"]) + + # start logger + logger.log(str(model), "main") + logger.log("Max iteration: %d" % (options["max_epoch"]), "main") + logger.log("Learning rate: %e" % (options["learning_rate"]), "main") + logger.log("Loss function", "main") + logger.log(str(loss_func), "main") + logger.log("Optimiser", "main") + logger.log(str(optimiser), "main") + logger.log("Model saved to %s" % (options["model_save_path"]), "main") + os.system("mkdir -p %s" % (options["model_save_path"][:options["model_save_path"].rfind('/')])) + + n_restart = int(options["n_restart"]) if "n_restart" in options.keys() else 20 + + # Train!! + logger.log("Train start", "main") + + train_x = np.array(range(options["max_epoch"])) + train_y = np.zeros(len(train_x), dtype=np.float32) + validate_x = np.array(range(options["max_epoch"])) + validate_y = np.zeros(len(validate_x), dtype=np.float32) + + for epoch in range(options["max_epoch"]): + loss_on_train = train(epoch, train_set_loader, model, loss_func, optimiser, logger, cuda=options["enable_cuda"]) + loss_on_validate = validate(epoch, validate_set_loader, model, loss_func, logger, cuda=options["enable_cuda"]) + + if epoch % (n_restart) == n_restart-1: + save_model(model, options["model_save_path"] + ".restart%d" % (epoch+1)) + train_y[epoch] = loss_on_train + validate_y[epoch] = loss_on_validate + + save_model(model, options["model_save_path"]) + logger.log("Model saved.", "main") + + logger.log("========Task Finish========") + +if __name__ == "__main__": + main() + diff --git a/nn-train/model.py b/nn-train/model.py new file mode 100644 index 0000000..e7f5787 --- /dev/null +++ b/nn-train/model.py @@ -0,0 +1,81 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +class CNN_GGA_1(nn.Module): + def __init__(self): + super(CNN_GGA_1, self).__init__() + self.rho_type = "GGA" + self.conv1 = nn.Conv3d(4, 8, 4) # 4@9x9x9 -> 8@6x6x6, 4x4x4 kernel + self.conv2 = nn.Conv3d(8, 16, 3) # 8@6x6x6 -> 16@4x4x4, 3x3x3 kernel + self.fc1 = nn.Linear(128, 64) + self.fc2 = nn.Linear(64, 32) + self.fc3 = nn.Linear(32, 16) + self.fc4 = nn.Linear(16, 1) + + def forward(self, x): + # x shape: 4 x 9 x 9 x 9 + # for GGA-like NN, use electron density and its gradients + + x = F.elu(self.conv1(x)) + x = F.elu(self.conv2(x)) + x = F.max_pool3d(x, 2) + x = x.view(-1, self.num_flat_features(x)) + x = F.elu(self.fc1(x)) + x = F.elu(self.fc2(x)) + x = F.elu(self.fc3(x)) + x = self.fc4(x) + return x + + def num_flat_features(self, x): + size = x.size()[1:] + num_features = 1 + for s in size: + num_features *= s + return num_features + + +class CNN_GGA_1_zsym(nn.Module): + def __init__(self): + super(CNN_GGA_1_zsym, self).__init__() + self.rho_type = "GGA" + + self.conv1 = nn.Conv3d(4, 8, 4) # 4@9x9x9 -> 8@6x6x6, 4x4x4 kernel + self.conv2 = nn.Conv3d(8, 16, 3) # 8@6x6x6 -> 16@4x4x4, 3x3x3 kernel + self.fc1 = nn.Linear(128, 64) + self.fc2 = nn.Linear(64, 32) + self.fc3 = nn.Linear(32, 16) + self.fc4 = nn.Linear(16, 1) + + def forward(self, x): + # x shape: batch_size x 2 x 4 x 9 x 9 x 9 + + xp = x[:, 0] + xp = F.elu(self.conv1(xp)) + xp = F.elu(self.conv2(xp)) + xp = F.max_pool3d(xp, 2) + xp = xp.view(-1, self.num_flat_features(xp)) + xp = F.elu(self.fc1(xp)) + xp = F.elu(self.fc2(xp)) + xp = F.elu(self.fc3(xp)) + xp = self.fc4(xp) + + xm = x[:, 1] + xm = F.elu(self.conv1(xm)) + xm = F.elu(self.conv2(xm)) + xm = F.max_pool3d(xm, 2) + xm = xm.view(-1, self.num_flat_features(xm)) + xm = F.elu(self.fc1(xm)) + xm = F.elu(self.fc2(xm)) + xm = F.elu(self.fc3(xm)) + xm = self.fc4(xm) + + return (xm, xp) + + def num_flat_features(self, x): + size = x.size()[1:] + num_features = 1 + for s in size: + num_features *= s + return num_features + diff --git a/nn-train/re_save_model.py b/nn-train/re_save_model.py new file mode 100644 index 0000000..159510d --- /dev/null +++ b/nn-train/re_save_model.py @@ -0,0 +1,14 @@ +from __future__ import print_function +import sys +from model import CNN_GGA_1 +from func import load_model, save_model + +print(sys.argv) + +m = CNN_GGA_1() + +load_model(m, sys.argv[1]) +m.cpu() +m.cpu() +save_model(m, sys.argv[2]) + diff --git a/nn-train/test.py b/nn-train/test.py new file mode 100644 index 0000000..5167575 --- /dev/null +++ b/nn-train/test.py @@ -0,0 +1,69 @@ +from __future__ import print_function +import datetime +import os, sys +import numpy +import torch.optim as optim + +from const_list import * +from Config import get_options +from dataset import * +from func import * +from log_to_file import Logger + +def main(): + # options = get_options(sys.argv[1]) + for opts in sys.argv[1:]: + # print(opts) + options = get_options(opts) + + os.system("mkdir -p %s" % (options["log_path"][:options["log_path"].rfind('/')])) + logger = Logger(options["log_path"], to_stdout=options["verbose"]) + logger.log("========Task Start========") + + test_set_loader = get_test_set(options) + + model = get_model(options["model"])() + + if options["loss_function"] == "MSELoss_zsym": + if options.has_key("zsym_coef"): + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])(float(options["zsym_coef"])) + else: + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])() + else: + loss_func = get_list_item(LOSS_FUNC_LIST, options["loss_function"])() + loss_func.size_average = True + + load_model(model, options["restart"]) + if options["enable_cuda"]: + model.cuda() + + # start logger + logger.log(str(model), "main") + logger.log("Loss function", "main") + logger.log(str(loss_func), "main") + logger.log("Model loaded from %s" % (options["restart"]), "main") + + # Test!! + logger.log("Test start", "main") + + loss_on_test, test_output, test_target = \ + test(test_set_loader, model, loss_func, logger, cuda=options["enable_cuda"]) + + os.system("mkdir -p %s" % (options["output_path"])) + save_ndarray(test_output, + "%s/%s_output" % + (options["output_path"], + options["restart"].split("/")[-1] + )) + save_ndarray(test_target, + "%s/%s_target" % + (options["output_path"], + options["restart"].split("/")[-1] + )) + + + logger.log("========Task Finish========") + +if __name__ == "__main__": + main() + diff --git a/oep-wy/Config.py b/oep-wy/Config.py new file mode 100644 index 0000000..ff31100 --- /dev/null +++ b/oep-wy/Config.py @@ -0,0 +1,58 @@ +import configparser + + +def _get_typed_arg(f, key, fallback=None, tolist=False): + v = f(key, fallback=fallback) + if tolist: v = v.split() + return v + + +def parse_dataset_options(sec): + dataset_opts = dict() + dataset_opts['MeshLevel'] = _get_typed_arg(sec.getint, 'MeshLevel', fallback=3) + dataset_opts['CubeLength'] = _get_typed_arg(sec.getfloat, 'CubeLength', fallback=0.9) + dataset_opts['CubePoint'] = _get_typed_arg(sec.getint, 'CubePoint', fallback=9) + dataset_opts['OutputPath'] = _get_typed_arg(sec.get, 'OutputPath', fallback='.') + dataset_opts['OutputName'] = _get_typed_arg(sec.get, 'OutputName', fallback='data') + dataset_opts['Symmetric'] = _get_typed_arg(sec.get, 'Symmetric', fallback=None) + dataset_opts['RandomTransform'] = _get_typed_arg(sec.getboolean, 'RandomTransform', fallback=False) + return dataset_opts + + +def parse_oep_options(sec): + oep_opts = dict() + oep_opts['SpinUnrestricted'] = _get_typed_arg(sec.getboolean, 'SpinUnrestricted', fallback=False) + oep_opts['InputDensity'] = _get_typed_arg(sec.get, 'InputDensity', tolist=True) + oep_opts['Structure'] = _get_typed_arg(sec.get, 'Structure') + oep_opts['OrbitalBasis'] = _get_typed_arg(sec.get, 'OrbitalBasis') + oep_opts['PotentialBasis'] = _get_typed_arg(sec.get, 'PotentialBasis') + oep_opts['ReferencePotential'] = _get_typed_arg(sec.get, 'ReferencePotential', fallback='hfx', tolist=True) + oep_opts['PotentialCoefficientInit'] = _get_typed_arg(sec.get, 'PotentialCoefficientInit', fallback='zeros', tolist=True) + + oep_opts['CheckPointPath'] = _get_typed_arg(sec.get, 'CheckPointPath', fallback='.') + + oep_opts['ConvergenceCriterion'] = _get_typed_arg(sec.getfloat, 'ConvergenceCriterion', fallback=1e-8) + oep_opts['MaxIterator'] = _get_typed_arg(sec.getint, 'MaxIterator', fallback=99) + oep_opts['SVDCutoff'] = _get_typed_arg(sec.getfloat, 'SVDCutoff', fallback=0) + oep_opts['LambdaRegulation'] = _get_typed_arg(sec.getfloat, 'LambdaRegulation', fallback=0) + oep_opts['ZeroForceConstrain'] = _get_typed_arg(sec.getboolean, 'ZeroForceConstrain', fallback=False) + oep_opts['RealSpaceAnalysis'] = _get_typed_arg(sec.getboolean, 'RealSpaceAnalysis', fallback=True) + oep_opts['FullRealSpacePotential'] = _get_typed_arg(sec.getboolean, 'FullRealSpacePotential', fallback=False) + + return oep_opts + + +def get_options(config_file, sec): + config = configparser.ConfigParser() + config.read(config_file) + if sec == 'OEP': + return parse_oep_options(config['OEP']) + elif sec == 'DATASET': + return parse_dataset_options(config['DATASET']) + + +if __name__ == '__main__': + oep_opts = get_options('test/oep.cfg', 'OEP') + for k, v in oep_opts.items(): + print(k, v, v.__class__) + diff --git a/oep-wy/I.py b/oep-wy/I.py new file mode 100644 index 0000000..a482c8a --- /dev/null +++ b/oep-wy/I.py @@ -0,0 +1,35 @@ +from __future__ import division +import argparse +import numpy + +from pyscf import gto, scf +from density import * + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('atom', type=str) + parser.add_argument('basis', type=str) + parser.add_argument('--charge', dest='charge', type=int, nargs='?', default=0) + parser.add_argument('dm_fns', type=str, nargs='+') + parser.add_argument('--grid_level', dest='grid_level', type=int, nargs='?', default=3) + args = parser.parse_args() + + mol = gto.M(atom=args.atom, basis=args.basis, charge=args.charge) + mr = scf.RKS(mol) + mr.grids.level = args.grid_level + mr.grids.build() + + coords = mr.grids.coords + weights = mr.grids.weights + + dms = [numpy.load(fn) for fn in args.dm_fns] + rhos = [calc_real_space_density(mol, coords, dm) for dm in dms] + Is = [I(rhos[0], rho, weights) for rho in rhos] + for i in Is: + print('%+16.8e' % (i)) + + +if __name__ == '__main__': + main() + diff --git a/oep-wy/IO.py b/oep-wy/IO.py new file mode 100644 index 0000000..1ab3364 --- /dev/null +++ b/oep-wy/IO.py @@ -0,0 +1,48 @@ +from __future__ import print_function +import numpy as np + + +def parse_str(fn): + """ + str file uses a format similar to .xyz file. + + Line 1 number of atoms + Line 2 atom x y z [AA] + Line 3 atom x y z [AA] + ... + Line N atom x y z [AA] + Line N+1 charge spin + + The `spin' follows the definition in PySCF, + equalling to N(alpha)-N(beta) + The last line is OPTIONAL. + If not provided, the default value is 0, 0 + """ + atom_list = list() + atom_str = '' + with open(fn) as fp: + n = int(fp.readline()) + for i in range(n): + ss = fp.readline().split() + atom_list.append(ss[0]) + atom_str += "%s %16.8e %16.8e %16.8e; " % (ss[0], float(ss[1]), float(ss[2]), float(ss[3])) + + ss = fp.readline().split() + if len(ss) > 0: + charge, spin = int(ss[0]), int(ss[1]) + else: + charge, spin = 0, 0 + + return atom_list, atom_str, charge, spin + + +def _load_density(fn): + if fn.endswith('npy'): + return np.load(fn) + else: + return np.loadtxt(fn) + + +def load_density(fns): + return [_load_density[f] for f in fns] + diff --git a/oep-wy/basis.py b/oep-wy/basis.py new file mode 100644 index 0000000..71df543 --- /dev/null +++ b/oep-wy/basis.py @@ -0,0 +1,334 @@ +from __future__ import print_function +from pyscf import gto, lib +import numpy as np +import ctypes +from utility import clean_array + + +def get_orbital_basis(atoms, basis_name): + """ + get orbital basis from pyscf + On output, basis is stored in internal format of pyscf, + i.e. + { + 'H': + [ + [ANG, + [exp, coef], + [exp, coef], + [exp, coef], + ... + ], + [ANG, + [exp, coef], + [exp, coef], + [exp, coef], + ... + ], + ... + ] # end of 'H' + ... + } + """ + basis_tab = dict() + for i in range(len(atoms)): + basis_tab[atoms[i]] = basis_name + orbital_basis = gto.format_basis(basis_tab) + return orbital_basis + + +def get_potential_basis(atoms, basis_name): + potential_basis = dict() + for i in range(len(atoms)): + atom = atoms[i] + potential_basis[atom] = gto.load(basis_name, atom) + return potential_basis + + +def get_overlap_g(mol, concatenate_basis, nbas_orbital_atom, nbas_potential_atom): + """ + S_{tu}^{g} = + """ + + nbas_potential = np.sum(nbas_potential_atom) + aux = mol.copy() + aux.basis = concatenate_basis + aux.build() + S = aux.intor("cint1e_ovlp_sph") + Sg = np.empty([nbas_potential, nbas_potential], dtype=np.float) + + piS = 0; piSg = 0 + for ia in range(mol.natm): + pjS = 0; pjSg = 0 + niorb = nbas_orbital_atom[ia] + nipot = nbas_potential_atom[ia] + for ja in range(mol.natm): + njorb = nbas_orbital_atom[ja] + njpot = nbas_potential_atom[ja] + Sg[piSg:piSg+nipot, pjSg:pjSg+njpot] = \ + S[piS+niorb:piS+niorb+nipot, pjS+njorb:pjS+njorb+njpot] + + pjS += njorb + njpot + pjSg += njpot + + piS += niorb + nipot + piSg += nipot + + return Sg + + +def get_kinetic_g(mol, concatenate_basis, nbas_orbital_atom, nbas_potential_atom): + """ + T_{tu}^{g} = + """ + nbas_potential = np.sum(nbas_potential_atom) + aux = mol.copy() + aux.basis = concatenate_basis + aux.build() + T = aux.intor("cint1e_kin_sph") + Tg = np.empty([nbas_potential, nbas_potential], dtype=np.float) + piT = 0; piTg = 0 + for ia in range(mol.natm): + pjT = 0; pjTg = 0 + niorb = nbas_orbital_atom[ia] + nipot = nbas_potential_atom[ia] + for ja in range(mol.natm): + njorb = nbas_orbital_atom[ja] + njpot = nbas_potential_atom[ja] + Tg[piTg:piTg+nipot, pjTg:pjTg+njpot] = \ + T[piT+niorb:piT+niorb+nipot, pjT+njorb:pjT+njorb+njpot] + + pjT += njorb + njpot + pjTg += njpot + + piT += niorb + nipot + piTg += nipot + + return Tg + + +def concatenate_basis(atoms, orbital_basis, potential_basis): + """ + concatenate orbital basis and potential basis. + both orbital_basis and potential_basis are in + internal format of PySCF. + On output, a combined basis is returned + """ + + conc_basis = {key: value[:] for key, value in orbital_basis.items()} + uatoms = np.unique(atoms).tolist() + for i in range(len(uatoms)): + atom = uatoms[i] + potential_basis_atom = potential_basis[atom] + for basis in potential_basis_atom: + conc_basis[atom].append(basis) + + return conc_basis + + +def _bas_length(basis): + l = len(basis) + for b in basis: + if len(b[1]) > 2: + l += 1 + return l + + +def get_integrals_3c1e(mol, atoms, + orbital_basis_name, potential_basis_name): + """ + generate integral table for \int xi_{i} xi_{j} \g_{t} dr + + """ + + + # get basis + orbital_basis = get_orbital_basis(atoms, orbital_basis_name) + + potential_basis = get_potential_basis(atoms, potential_basis_name) + + # orbital alignment informations + bas_start_orbital = np.zeros(len(atoms), dtype=np.int) + bas_start_potential = np.zeros(len(atoms), dtype=np.int) + for i in range(len(atoms)): + if i == 0: + bas_start_orbital[i] = 0 + else: + bas_start_orbital[i] = bas_start_potential[i - 1] + _bas_length(potential_basis[atoms[i - 1]]) + + bas_start_potential[i] = bas_start_orbital[i] + _bas_length(orbital_basis[atoms[i]]) + + conc_basis = concatenate_basis(atoms, orbital_basis, potential_basis) + nbas_conc = sum([_bas_length(conc_basis[atoms[i]]) for i in range(len(atoms))]) + basis_tag = np.ones(nbas_conc, dtype=np.int) + # orbital basis: 0 + # potential basis: 1 + pi = 0 + for i in range(len(atoms)): + di = _bas_length(orbital_basis[atoms[i]]) + basis_tag[pi:pi + di] = 0 + pi += _bas_length(conc_basis[atoms[i]]) + + # assign concatenated basis to an auxiliary mole object + aux = mol.copy() + aux.basis = conc_basis + aux.build() + + # components for basis function + # s - 1; p - 3; d - 5, ... + nbas_conc = sum([_bas_length(aux._basis[atoms[i]]) for i in range(len(atoms))]) + n_components = np.zeros([nbas_conc], dtype=np.int) + orb_components = 0 + pot_components = 0 + k = 0 + for i in range(len(atoms)): + atom = atoms[i] + for basis in conc_basis[atom]: + n_components[k] = 2 * basis[0] + 1 + if bas_start_orbital[i] <= k < bas_start_potential[i]: + orb_components += 2 * basis[0] + 1 + if len(basis[1]) > 2: + orb_components += 2 * basis[0] + 1 + else: + pot_components += 2 * basis[0] + 1 + if len(basis[1]) > 2: + pot_components += 2 * basis[0] + 1 + k += 1 + if len(basis[1]) > 2: + n_components[k] = 2 * basis[0] + 1 + k += 1 + + total_components = np.sum(n_components) + assert(total_components == orb_components + pot_components) + + # let i and j go over all xi_{i} + # let k goes over all g_{t} + integral_table = aux.intor('int3c1e_sph') + integrals_3c1e = np.zeros([orb_components, orb_components, pot_components]) + pi = 0; ii = 0 + for i in range(nbas_conc): + di = n_components[i] + if basis_tag[i] == 1: ii += di; continue + + pj = 0; jj = 0 + for j in range(nbas_conc): + dj = n_components[j] + if basis_tag[j] == 1: jj += dj; continue + pk = 0; kk = 0 + for k in range(nbas_conc): + dk = n_components[k] + if basis_tag[k] == 0: kk += dk; continue + integrals_3c1e[pi:pi + di, pj:pj + dj, pk:pk + dk] = integral_table[ii:ii + di, jj:jj + dj, kk:kk + dk] + pk += dk; kk += dk; + pj += dj; jj += dj; + pi += di; ii += di; + + clean_array(integrals_3c1e) + return orbital_basis, potential_basis, conc_basis, integrals_3c1e + + +# int3c1e_ipovlp_sph +def get_integrals_3c1e_ip_ovlp(mol, atoms, + orbital_basis_name, potential_basis_name): + """ + < nabla i | j | k > = + \int nabla xi_{i} xi_{j} g_{t} dr + """ + comp = 3 + + + # get basis + orbital_basis = get_orbital_basis(atoms, orbital_basis_name) + + potential_basis = get_potential_basis(atoms, potential_basis_name) + + # orbital alignment informations + bas_start_orbital = np.zeros(len(atoms), dtype=np.int) + bas_start_potential = np.zeros(len(atoms), dtype=np.int) + for i in range(len(atoms)): + if i == 0: + bas_start_orbital[i] = 0 + else: + bas_start_orbital[i] = bas_start_potential[i - 1] + _bas_length(potential_basis[atoms[i - 1]]) + + bas_start_potential[i] = bas_start_orbital[i] + _bas_length(orbital_basis[atoms[i]]) + + conc_basis = concatenate_basis(atoms, orbital_basis, potential_basis) + nbas_conc = sum([_bas_length(conc_basis[atoms[i]]) for i in range(len(atoms))]) + basis_tag = np.ones(nbas_conc, dtype=np.int) + # orbital basis: 0 + # potential basis: 1 + pi = 0 + for i in range(len(atoms)): + di = _bas_length(orbital_basis[atoms[i]]) + basis_tag[pi:pi + di] = 0 + pi += _bas_length(conc_basis[atoms[i]]) + + # assign concatenated basis to an auxiliary mole object + aux = mol.copy() + aux.basis = conc_basis + aux.build() + + # components for basis function + # s - 1; p - 3; d - 5, ... + nbas_conc = sum([_bas_length(aux._basis[atoms[i]]) for i in range(len(atoms))]) + n_components = np.zeros([nbas_conc], dtype=np.int) + orb_components = 0 + pot_components = 0 + k = 0 + for i in range(len(atoms)): + atom = atoms[i] + for basis in conc_basis[atom]: + n_components[k] = 2 * basis[0] + 1 + if bas_start_orbital[i] <= k < bas_start_potential[i]: + orb_components += 2 * basis[0] + 1 + if len(basis[1]) > 2: + orb_components += 2 * basis[0] + 1 + else: + pot_components += 2 * basis[0] + 1 + if len(basis[1]) > 2: + pot_components += 2 * basis[0] + 1 + k += 1 + if len(basis[1]) > 2: + n_components[k] = 2 * basis[0] + 1 + k += 1 + total_components = np.sum(n_components) + assert(total_components == orb_components + pot_components) + + # let i and j go over all xi_{i} + # let k goes over all g_{t} + + integral_table = aux.intor('int3c1e_ipovlp_sph') + integrals_3c1e = np.zeros([comp, orb_components, orb_components, pot_components]) + pi = 0; ii = 0 + for i in range(nbas_conc): + di = n_components[i] + if basis_tag[i] == 1: ii += di; continue + pj = 0; jj = 0 + for j in range(nbas_conc): + dj = n_components[j] + if basis_tag[j] == 1: jj += dj; continue + + pk = 0; kk = 0 + for k in range(nbas_conc): + dk = n_components[k] + if basis_tag[k] == 0: kk += dk; continue + integrals_3c1e[0, pi:pi + di, pj:pj + dj, pk:pk + dk] = integral_table[0, ii:ii + di, jj:jj + dj, kk:kk + dk] + integrals_3c1e[1, pi:pi + di, pj:pj + dj, pk:pk + dk] = integral_table[1, ii:ii + di, jj:jj + dj, kk:kk + dk] + integrals_3c1e[2, pi:pi + di, pj:pj + dj, pk:pk + dk] = integral_table[2, ii:ii + di, jj:jj + dj, kk:kk + dk] + pk += dk; kk += dk + pj += dj; jj += dj + pi += di; ii += di + + clean_array(integrals_3c1e) + return orbital_basis, potential_basis, conc_basis, integrals_3c1e + + +def reshape_integral_table_NN_T(integrals_3c1e): + N, T = integrals_3c1e.shape[0], integrals_3c1e.shape[2] + table = np.empty([N * N, T]) + for i in range(T): + table[:, i] = (integrals_3c1e[:, :, i].reshape(N * N))[:] + return table + + diff --git a/oep-wy/basis/H2_S4_631G-XC.dat b/oep-wy/basis/H2_S4_631G-XC.dat new file mode 100644 index 0000000..6c04fd8 --- /dev/null +++ b/oep-wy/basis/H2_S4_631G-XC.dat @@ -0,0 +1,11 @@ +BASIS "ao basis" PRINT +#BASIS SET: (4s) -> [4s] +H S +12.48742467 1.0000000 +H S +1.8835958 1.0000000 +H S +0.4267478 1.0000000 +H S +0.4267478 1.0000000 +END diff --git a/oep-wy/basis/H2_S7_631G-XC1.dat b/oep-wy/basis/H2_S7_631G-XC1.dat new file mode 100644 index 0000000..d13e525 --- /dev/null +++ b/oep-wy/basis/H2_S7_631G-XC1.dat @@ -0,0 +1,17 @@ +BASIS "ao basis" PRINT +#BASIS SET: (7s) -> [7s] +H S +12.48742467 1.0 +H S +1.8835958 1.0 +H S +0.4267478 1.0 +H S +0.107518533 1.0 +H S +7.185510233 1.0 +H S +1.1551718 1.0 +H S +0.267133167 1.0 +END diff --git a/oep-wy/basis/He_av6z.dat b/oep-wy/basis/He_av6z.dat new file mode 100644 index 0000000..714a4f1 --- /dev/null +++ b/oep-wy/basis/He_av6z.dat @@ -0,0 +1,62 @@ +BASIS "ao basis" PRINT +#BASIS SET: (11s,6p,5d,4f,3g,2h) -> [8s,6p,5d,4f,3g,2h] +He S + 4785.0000000 0.0000006 + 717.0000000 0.0000047 + 163.2000000 0.0000244 + 46.2600000 0.0001012 + 15.1000000 0.0003486 +He S + 5.4370000 1.0000000 +He S + 2.0880000 1.0000000 +He S + 0.8297000 1.0000000 +He S + 0.3366000 1.0000000 +He S + 0.1369000 1.0000000 +He S + 0.0447300 1.0000000 +He P + 0.3870000 1.0000000 +He P + 0.9840000 1.0000000 +He P + 2.4980000 1.0000000 +He P + 6.3420000 1.0000000 +He P + 16.1040000 1.0000000 +He P + 0.1280000 1.0000000 +He D + 0.7470000 1.0000000 +He D + 1.9100000 1.0000000 +He D + 4.8860000 1.0000000 +He D + 12.4980000 1.0000000 +He D + 0.2410000 1.0000000 +He F + 1.2920000 1.0000000 +He F + 3.4620000 1.0000000 +He F + 9.2760000 1.0000000 +He F + 0.4070000 1.0000000 +He G + 2.2360000 1.0000000 +He G + 6.5860000 1.0000000 +He G + 0.6860000 1.0000000 +He H + 4.1590000 1.0000000 +He H + 1.0160000 1.0000000 +END + diff --git a/oep-wy/basis/He_avqz_ms_mp_18.dat b/oep-wy/basis/He_avqz_ms_mp_18.dat new file mode 100644 index 0000000..014c06d --- /dev/null +++ b/oep-wy/basis/He_avqz_ms_mp_18.dat @@ -0,0 +1,2281 @@ +# aug-cc-pVQZ EMSL Basis Set Exchange Library 9/15/14 7:24 AM +# Elements References +# -------- ---------- +# H : T.H. Dunning, Jr. J. Chem. Phys. 90, 1007 (1989). +# He : D.E. Woon and T.H. Dunning, Jr. J. Chem. Phys. 100, 2975 (1994). +# Li - Ne: T.H. Dunning, Jr. J. Chem. Phys. 90, 1007 (1989). +# Na - Mg: D.E. Woon and T.H. Dunning, Jr. (to be published) +# Al - Ar: D.E. Woon and T.H. Dunning, Jr. J. Chem. Phys. 98, 1358 (1993). +# Ca : J. Koput and K.A. Peterson, J. Phys. Chem. A, 106, 9595 (2002). +# Sc - Zn: N.B. Balabanov and K.A. Peterson, J. Chem. Phys, 123, 064107 (2005) +# Ga - Kr: A.K. Wilson, D.E. Woon, K.A. Peterson, T.H. Dunning, Jr. J. Chem. Phys., 110, 7667 (1999) +# + + +# Elements References +# -------- --------- +# H : T.H. Dunning, Jr. J. Chem. Phys. 90, 1007 (1989). +# He : D.E. Woon and T.H. Dunning, Jr., J. Chem. Phys. 100, 2975 (1994). +# B - F: R.A. Kendall, T.H. Dunning, Jr. and R.J. Harrison, J. Chem. Phys. 96, +# 6796 (1992). +# Al - Cl: D.E. Woon and T.H. Dunning, Jr. J. Chem. Phys. 98, 1358 (1993). +# Sc - Zn: N.B. Balabanov and K.A. Peterson, J. Chem. Phys, 123, 064107 (2005) +# + + + +BASIS "ao basis" PRINT +#BASIS SET: (7s,4p,3d,2f) -> [5s,4p,3d,2f] +H S + 82.6400000 0.0020060 + 12.4100000 0.0153430 + 2.8240000 0.0755790 +H S + 0.7977000 1.0000000 +H S + 0.2581000 1.0000000 +H S + 0.0898900 1.0000000 +H S + 0.0236300 1.0000000 +H P + 2.2920000 1.0000000 +H P + 0.8380000 1.0000000 +H P + 0.2920000 1.0000000 +H P + 0.0848000 1.0000000 +H D + 2.0620000 1.0000000 +H D + 0.6620000 1.0000000 +H D + 0.1900000 1.0000000 +H F + 1.3970000 1.0000000 +H F + 0.3600000 1.0000000 +#BASIS SET: (8s,4p,3d,2f) -> [5s,4p,3d,2f] +He S + 528.5000000 0.0009400 + 79.3100000 0.0072140 + 18.0500000 0.0359750 + 5.0850000 0.1277820 +He S + 1.6090000 1.0000000 +He S + 0.5363000 1.0000000 +He S + 0.1833000 1.0000000 +He S + 0.0530000 1.0000000 +He S + 0.0481900 1.0000000 +He S + 0.0438100 1.0000000 +He P + 5.9940000 1.0000000 +He P + 2.0000000 1.0000000 +He P + 1.6720000 1.0000000 +He P + 1.3930000 1.0000000 +He P + 1.1610000 1.0000000 +He P + 0.9677000 1.0000000 +He P + 0.8064000 1.0000000 +He P + 0.6720000 1.0000000 +He P + 0.5600000 1.0000000 +He P + 0.4855000 1.0000000 +He P + 0.4046000 1.0000000 +He P + 0.3372000 1.0000000 +He P + 0.2809000 1.0000000 +He P + 0.2341000 1.0000000 +He P + 0.1951000 1.0000000 +He P + 0.1626000 1.0000000 +He P + 0.1355000 1.0000000 +He P + 0.1129000 1.0000000 +He P + 0.0941000 1.0000000 +He P + 0.0784000 1.0000000 +He P + 0.0653000 1.0000000 +He P + 0.0544000 1.0000000 +He D + 4.2990000 1.0000000 +He D + 1.2230000 1.0000000 +He D + 0.3510000 1.0000000 +He F + 2.6800000 1.0000000 +He F + 0.6906000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +Li S + 6601.0000000 0.0001170 -0.0000180 + 989.7000000 0.0009110 -0.0001420 + 225.7000000 0.0047280 -0.0007410 + 64.2900000 0.0191970 -0.0030200 + 21.1800000 0.0630470 -0.0101230 + 7.7240000 0.1632080 -0.0270940 + 3.0030000 0.3148270 -0.0573590 + 1.2120000 0.3939360 -0.0938950 + 0.4930000 0.1969180 -0.1210910 +Li S + 0.0951500 1.0000000 +Li S + 0.0479100 1.0000000 +Li S + 0.0222000 1.0000000 +Li S + 0.0063600 1.0000000 +Li P + 6.2500000 0.0033880 + 1.3700000 0.0193160 + 0.3672000 0.0791040 +Li P + 0.1192000 1.0000000 +Li P + 0.0447400 1.0000000 +Li P + 0.0179500 1.0000000 +Li P + 0.0075600 1.0000000 +Li D + 0.3440000 1.0000000 +Li D + 0.1530000 1.0000000 +Li D + 0.0680000 1.0000000 +Li D + 0.0266000 1.0000000 +Li F + 0.2460000 1.0000000 +Li F + 0.1292000 1.0000000 +Li F + 0.0552000 1.0000000 +Li G + 0.2380000 1.0000000 +Li G + 0.1050000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +Be S + 14630.0000000 0.0000920 -0.0000170 + 2191.0000000 0.0007130 -0.0001300 + 498.2000000 0.0037350 -0.0006790 + 140.9000000 0.0154680 -0.0028570 + 45.8600000 0.0528740 -0.0098130 + 16.4700000 0.1456940 -0.0286090 + 6.3190000 0.3026810 -0.0637600 + 2.5350000 0.4049360 -0.1172310 + 1.0350000 0.2223870 -0.1212020 +Be S + 0.2528000 1.0000000 +Be S + 0.1052000 1.0000000 +Be S + 0.0426100 1.0000000 +Be S + 0.0143900 1.0000000 +Be P + 14.0300000 0.0040990 + 3.1680000 0.0256260 + 0.9024000 0.1037680 +Be P + 0.3036000 1.0000000 +Be P + 0.1130000 1.0000000 +Be P + 0.0428600 1.0000000 +Be P + 0.0065000 1.0000000 +Be D + 1.0720000 1.0000000 +Be D + 0.4410000 1.0000000 +Be D + 0.1811000 1.0000000 +Be D + 0.0554000 1.0000000 +Be F + 0.4810000 1.0000000 +Be F + 0.2550000 1.0000000 +Be F + 0.0930000 1.0000000 +Be G + 0.4150000 1.0000000 +Be G + 0.1834000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +B S + 23870.0000000 0.0000880 -0.0000180 + 3575.0000000 0.0006870 -0.0001390 + 812.8000000 0.0036000 -0.0007250 + 229.7000000 0.0149490 -0.0030630 + 74.6900000 0.0514350 -0.0105810 + 26.8100000 0.1433020 -0.0313650 + 10.3200000 0.3009350 -0.0710120 + 4.1780000 0.4035260 -0.1321030 + 1.7270000 0.2253400 -0.1230720 +B S + 0.4704000 1.0000000 +B S + 0.1896000 1.0000000 +B S + 0.0739400 1.0000000 +B S + 0.0272100 1.0000000 +B P + 22.2600000 0.0050950 + 5.0580000 0.0332060 + 1.4870000 0.1323140 +B P + 0.5071000 1.0000000 +B P + 0.1812000 1.0000000 +B P + 0.0646300 1.0000000 +B P + 0.0187800 1.0000000 +B D + 1.1100000 1.0000000 +B D + 0.4020000 1.0000000 +B D + 0.1450000 1.0000000 +B D + 0.0466000 1.0000000 +B F + 0.8820000 1.0000000 +B F + 0.3110000 1.0000000 +B F + 0.1130000 1.0000000 +B G + 0.6730000 1.0000000 +B G + 0.2730000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +C S + 33980.0000000 0.0000910 -0.0000190 + 5089.0000000 0.0007040 -0.0001510 + 1157.0000000 0.0036930 -0.0007850 + 326.6000000 0.0153600 -0.0033240 + 106.1000000 0.0529290 -0.0115120 + 38.1100000 0.1470430 -0.0341600 + 14.7500000 0.3056310 -0.0771730 + 6.0350000 0.3993450 -0.1414930 + 2.5300000 0.2170510 -0.1180190 +C S + 0.7355000 1.0000000 +C S + 0.2905000 1.0000000 +C S + 0.1111000 1.0000000 +C S + 0.0414500 1.0000000 +C P + 34.5100000 0.0053780 + 7.9150000 0.0361320 + 2.3680000 0.1424930 +C P + 0.8132000 1.0000000 +C P + 0.2890000 1.0000000 +C P + 0.1007000 1.0000000 +C P + 0.0321800 1.0000000 +C D + 1.8480000 1.0000000 +C D + 0.6490000 1.0000000 +C D + 0.2280000 1.0000000 +C D + 0.0766000 1.0000000 +C F + 1.4190000 1.0000000 +C F + 0.4850000 1.0000000 +C F + 0.1870000 1.0000000 +C G + 1.0110000 1.0000000 +C G + 0.4240000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +N S + 45840.0000000 0.0000920 -0.0000200 + 6868.0000000 0.0007170 -0.0001590 + 1563.0000000 0.0037490 -0.0008240 + 442.4000000 0.0155320 -0.0034780 + 144.3000000 0.0531460 -0.0119660 + 52.1800000 0.1467870 -0.0353880 + 20.3400000 0.3046630 -0.0800770 + 8.3810000 0.3976840 -0.1467220 + 3.5290000 0.2176410 -0.1163600 +N S + 1.0540000 1.0000000 +N S + 0.4118000 1.0000000 +N S + 0.1552000 1.0000000 +N S + 0.0546400 1.0000000 +N P + 49.3300000 0.0055330 + 11.3700000 0.0379620 + 3.4350000 0.1490280 +N P + 1.1820000 1.0000000 +N P + 0.4173000 1.0000000 +N P + 0.1428000 1.0000000 +N P + 0.0440200 1.0000000 +N D + 2.8370000 1.0000000 +N D + 0.9680000 1.0000000 +N D + 0.3350000 1.0000000 +N D + 0.1110000 1.0000000 +N F + 2.0270000 1.0000000 +N F + 0.6850000 1.0000000 +N F + 0.2450000 1.0000000 +N G + 1.4270000 1.0000000 +N G + 0.5590000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +O S + 61420.0000000 0.0000900 -0.0000200 + 9199.0000000 0.0006980 -0.0001590 + 2091.0000000 0.0036640 -0.0008290 + 590.9000000 0.0152180 -0.0035080 + 192.3000000 0.0524230 -0.0121560 + 69.3200000 0.1459210 -0.0362610 + 26.9700000 0.3052580 -0.0829920 + 11.1000000 0.3985080 -0.1520900 + 4.6820000 0.2169800 -0.1153310 +O S + 1.4280000 1.0000000 +O S + 0.5547000 1.0000000 +O S + 0.2067000 1.0000000 +O S + 0.0695900 1.0000000 +O P + 63.4200000 0.0060440 + 14.6600000 0.0417990 + 4.4590000 0.1611430 +O P + 1.5310000 1.0000000 +O P + 0.5302000 1.0000000 +O P + 0.1750000 1.0000000 +O P + 0.0534800 1.0000000 +O D + 3.7750000 1.0000000 +O D + 1.3000000 1.0000000 +O D + 0.4440000 1.0000000 +O D + 0.1540000 1.0000000 +O F + 2.6660000 1.0000000 +O F + 0.8590000 1.0000000 +O F + 0.3240000 1.0000000 +O G + 1.8460000 1.0000000 +O G + 0.7140000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +F S + 74530.0000000 0.0000950 -0.0000220 + 11170.0000000 0.0007380 -0.0001720 + 2543.0000000 0.0038580 -0.0008910 + 721.0000000 0.0159260 -0.0037480 + 235.9000000 0.0542890 -0.0128620 + 85.6000000 0.1495130 -0.0380610 + 33.5500000 0.3082520 -0.0862390 + 13.9300000 0.3948530 -0.1558650 + 5.9150000 0.2110310 -0.1109140 +F S + 1.8430000 1.0000000 +F S + 0.7124000 1.0000000 +F S + 0.2637000 1.0000000 +F S + 0.0859400 1.0000000 +F P + 80.3900000 0.0063470 + 18.6300000 0.0442040 + 5.6940000 0.1685140 +F P + 1.9530000 1.0000000 +F P + 0.6702000 1.0000000 +F P + 0.2166000 1.0000000 +F P + 0.0656800 1.0000000 +F D + 5.0140000 1.0000000 +F D + 1.7250000 1.0000000 +F D + 0.5860000 1.0000000 +F D + 0.2070000 1.0000000 +F F + 3.5620000 1.0000000 +F F + 1.1480000 1.0000000 +F F + 0.4600000 1.0000000 +F G + 2.3760000 1.0000000 +F G + 0.9240000 1.0000000 +#BASIS SET: (13s,7p,4d,3f,2g) -> [6s,5p,4d,3f,2g] +Ne S + 99920.0000000 0.0000860 -0.0000200 + 14960.0000000 0.0006690 -0.0001580 + 3399.0000000 0.0035180 -0.0008240 + 958.9000000 0.0146670 -0.0035000 + 311.2000000 0.0509620 -0.0122330 + 111.7000000 0.1437440 -0.0370170 + 43.3200000 0.3045620 -0.0861130 + 17.8000000 0.4001050 -0.1583810 + 7.5030000 0.2186440 -0.1142880 +Ne S + 2.3370000 1.0000000 +Ne S + 0.9001000 1.0000000 +Ne S + 0.3301000 1.0000000 +Ne S + 0.1054000 1.0000000 +Ne P + 99.6800000 0.0065660 + 23.1500000 0.0459790 + 7.1080000 0.1734190 +Ne P + 2.4410000 1.0000000 +Ne P + 0.8339000 1.0000000 +Ne P + 0.2662000 1.0000000 +Ne P + 0.0817800 1.0000000 +Ne D + 6.4710000 1.0000000 +Ne D + 2.2130000 1.0000000 +Ne D + 0.7470000 1.0000000 +Ne D + 0.2730000 1.0000000 +Ne F + 4.6570000 1.0000000 +Ne F + 1.5240000 1.0000000 +Ne F + 0.6890000 1.0000000 +Ne G + 2.9830000 1.0000000 +Ne G + 1.2240000 1.0000000 +#BASIS SET: (20s,13p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Na S + 1224000.0000000 0.478894D-05 -0.116958D-05 0.175871D-06 + 183200.0000000 0.372395D-04 -0.909110D-05 0.136594D-05 + 41700.0000000 0.195831D-03 -0.478499D-04 0.719795D-05 + 11810.0000000 0.826698D-03 -0.201962D-03 0.303349D-04 + 3853.0000000 0.300251D-02 -0.735837D-03 0.110752D-03 + 1391.0000000 0.970310D-02 -0.238746D-02 0.358596D-03 + 542.5000000 0.282337D-01 -0.704969D-02 0.106272D-02 + 224.9000000 0.732058D-01 -0.187856D-01 0.282687D-02 + 97.9300000 0.162897D+00 -0.446153D-01 0.676742D-02 + 44.3100000 0.288708D+00 -0.897741D-01 0.136480D-01 + 20.6500000 0.346829D+00 -0.142940D+00 0.222814D-01 + 9.7290000 0.206865D+00 -0.124315D+00 0.196011D-01 + 4.2280000 0.328009D-01 0.999648D-01 -0.167708D-01 + 1.9690000 -0.647736D-03 0.417080D+00 -0.773734D-01 + 0.8890000 0.145878D-02 0.475123D+00 -0.113501D+00 + 0.3964000 -0.178346D-03 0.163268D+00 -0.139130D+00 +Na S + 0.0699300 1.0000000 +Na S + 0.0328900 1.0000000 +Na S + 0.0161200 1.0000000 +Na S + 0.0050300 1.0000000 +Na P + 413.4000000 0.908196D-03 -0.901741D-04 + 97.9800000 0.741773D-02 -0.739342D-03 + 31.3700000 0.357464D-01 -0.357309D-02 + 11.6200000 0.118520D+00 -0.120142D-01 + 4.6710000 0.261403D+00 -0.267178D-01 + 1.9180000 0.378395D+00 -0.392753D-01 + 0.7775000 0.334632D+00 -0.376083D-01 + 0.3013000 0.126844D+00 -0.433228D-01 + 0.2275000 -0.147117D-01 0.518003D-01 +Na P + 0.0752700 1.0000000 +Na P + 0.0312600 1.0000000 +Na P + 0.0134200 1.0000000 +Na P + 0.0077200 1.0000000 +Na D + 0.1538000 1.0000000 +Na D + 0.0865000 1.0000000 +Na D + 0.0487000 1.0000000 +Na D + 0.0210000 1.0000000 +Na F + 0.1912000 1.0000000 +Na F + 0.1036000 1.0000000 +Na F + 0.0453000 1.0000000 +Na G + 0.1722000 1.0000000 +Na G + 0.0866000 1.0000000 +#BASIS SET: (17s,13p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Mg S + 327600.0000000 0.309608D-04 -0.783173D-05 0.150908D-05 + 49050.0000000 0.240954D-03 -0.607935D-04 0.117134D-04 + 11150.0000000 0.126660D-02 -0.321197D-03 0.618980D-04 + 3152.0000000 0.533359D-02 -0.134955D-02 0.260088D-03 + 1025.0000000 0.190770D-01 -0.490570D-02 0.946218D-03 + 368.8000000 0.588058D-01 -0.153561D-01 0.296595D-02 + 143.2000000 0.151454D+00 -0.423409D-01 0.821245D-02 + 58.9600000 0.300716D+00 -0.940603D-01 0.183977D-01 + 25.4000000 0.381149D+00 -0.163425D+00 0.326657D-01 + 11.1500000 0.213584D+00 -0.124754D+00 0.257315D-01 + 4.0040000 0.231210D-01 0.235623D+00 -0.535351D-01 + 1.7010000 -0.230757D-02 0.577563D+00 -0.156895D+00 + 0.7060000 0.128900D-02 0.335232D+00 -0.206659D+00 +Mg S + 0.1410000 1.0000000 +Mg S + 0.0680800 1.0000000 +Mg S + 0.0306300 1.0000000 +Mg S + 0.0123900 1.0000000 +Mg P + 539.6000000 0.833969D-03 -0.132076D-03 + 127.9000000 0.689215D-02 -0.109538D-02 + 41.0200000 0.337874D-01 -0.539495D-02 + 15.2500000 0.114401D+00 -0.185572D-01 + 6.1660000 0.259514D+00 -0.427375D-01 + 2.5610000 0.385095D+00 -0.647684D-01 + 1.0600000 0.335373D+00 -0.627818D-01 + 0.4176000 0.110641D+00 -0.244912D-01 + 0.2690000 -0.121315D-01 0.104761D+00 +Mg P + 0.1223000 1.0000000 +Mg P + 0.0547600 1.0000000 +Mg P + 0.0238800 1.0000000 +Mg P + 0.0070600 1.0000000 +Mg D + 0.1060000 1.0000000 +Mg D + 0.1944000 1.0000000 +Mg D + 0.3570000 1.0000000 +Mg D + 0.0382000 1.0000000 +Mg F + 0.1810000 1.0000000 +Mg F + 0.3590000 1.0000000 +Mg F + 0.0700000 1.0000000 +Mg G + 0.3070000 1.0000000 +Mg G + 0.1480000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Al S + 419600.0000000 0.278219D-04 -0.723754D-05 0.167150D-05 + 62830.0000000 0.216330D-03 -0.561733D-04 0.129641D-04 + 14290.0000000 0.113754D-02 -0.296528D-03 0.685101D-04 + 4038.0000000 0.479635D-02 -0.124913D-02 0.288274D-03 + 1312.0000000 0.172389D-01 -0.455101D-02 0.105276D-02 + 470.5000000 0.538066D-01 -0.144393D-01 0.333878D-02 + 181.8000000 0.141326D+00 -0.403464D-01 0.939217D-02 + 74.4600000 0.289268D+00 -0.922618D-01 0.216047D-01 + 31.9000000 0.384825D+00 -0.164510D+00 0.395873D-01 + 13.9600000 0.232852D+00 -0.141296D+00 0.349180D-01 + 5.1800000 0.293330D-01 0.195365D+00 -0.528415D-01 + 2.2650000 -0.300574D-02 0.572475D+00 -0.191878D+00 + 0.9664000 0.166673D-02 0.374041D+00 -0.254115D+00 +Al S + 0.2447000 1.0000000 +Al S + 0.1184000 1.0000000 +Al S + 0.0502100 1.0000000 +Al S + 0.0183000 1.0000000 +Al P + 891.3000000 0.491755D-03 -0.888695D-04 + 211.3000000 0.415843D-02 -0.745823D-03 + 68.2800000 0.212538D-01 -0.387025D-02 + 25.7000000 0.764058D-01 -0.139350D-01 + 10.6300000 0.194277D+00 -0.366860D-01 + 4.6020000 0.334428D+00 -0.627797D-01 + 2.0150000 0.375026D+00 -0.789602D-01 + 0.8706000 0.204041D+00 -0.288589D-01 +Al P + 0.2972000 1.0000000 +Al P + 0.1100000 1.0000000 +Al P + 0.0398900 1.0000000 +Al P + 0.0121000 1.0000000 +Al D + 0.0804000 1.0000000 +Al D + 0.1990000 1.0000000 +Al D + 0.4940000 1.0000000 +Al D + 0.0282000 1.0000000 +Al F + 0.1540000 1.0000000 +Al F + 0.4010000 1.0000000 +Al F + 0.0582000 1.0000000 +Al G + 0.3570000 1.0000000 +Al G + 0.1530000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Si S + 513000.0000000 0.260920D-04 -0.694880D-05 0.178068D-05 + 76820.0000000 0.202905D-03 -0.539641D-04 0.138148D-04 + 17470.0000000 0.106715D-02 -0.284716D-03 0.730005D-04 + 4935.0000000 0.450597D-02 -0.120203D-02 0.307666D-03 + 1602.0000000 0.162359D-01 -0.438397D-02 0.112563D-02 + 574.1000000 0.508913D-01 -0.139776D-01 0.358435D-02 + 221.5000000 0.135155D+00 -0.393516D-01 0.101728D-01 + 90.5400000 0.281292D+00 -0.914283D-01 0.237520D-01 + 38.7400000 0.385336D+00 -0.165609D+00 0.443483D-01 + 16.9500000 0.245651D+00 -0.152505D+00 0.419041D-01 + 6.4520000 0.343145D-01 0.168524D+00 -0.502504D-01 + 2.8740000 -0.334884D-02 0.569284D+00 -0.216578D+00 + 1.2500000 0.187625D-02 0.398056D+00 -0.286448D+00 +Si S + 0.3599000 1.0000000 +Si S + 0.1699000 1.0000000 +Si S + 0.0706600 1.0000000 +Si S + 0.0275000 1.0000000 +Si P + 1122.0000000 0.448143D-03 -0.964883D-04 + 266.0000000 0.381639D-02 -0.811971D-03 + 85.9200000 0.198105D-01 -0.430087D-02 + 32.3300000 0.727017D-01 -0.157502D-01 + 13.3700000 0.189839D+00 -0.429541D-01 + 5.8000000 0.335672D+00 -0.752574D-01 + 2.5590000 0.379365D+00 -0.971446D-01 + 1.1240000 0.201193D+00 -0.227507D-01 +Si P + 0.3988000 1.0000000 +Si P + 0.1533000 1.0000000 +Si P + 0.0572800 1.0000000 +Si P + 0.0200000 1.0000000 +Si D + 0.1200000 1.0000000 +Si D + 0.3020000 1.0000000 +Si D + 0.7600000 1.0000000 +Si D + 0.0435000 1.0000000 +Si F + 0.2120000 1.0000000 +Si F + 0.5410000 1.0000000 +Si F + 0.0846000 1.0000000 +Si G + 0.4610000 1.0000000 +Si G + 0.2120000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +P S + 615200.0000000 0.247450D-04 -0.672205D-05 0.184740D-05 + 92120.0000000 0.192465D-03 -0.522311D-04 0.143380D-04 + 20950.0000000 0.101202D-02 -0.275361D-03 0.757228D-04 + 5920.0000000 0.427261D-02 -0.116307D-02 0.319205D-03 + 1922.0000000 0.154161D-01 -0.424281D-02 0.116851D-02 + 688.0000000 0.485976D-01 -0.136114D-01 0.374267D-02 + 265.0000000 0.130060D+00 -0.385114D-01 0.106817D-01 + 108.2000000 0.274514D+00 -0.906643D-01 0.252657D-01 + 46.2200000 0.385402D+00 -0.166584D+00 0.479283D-01 + 20.2300000 0.255934D+00 -0.161447D+00 0.477096D-01 + 7.8590000 0.391237D-01 0.146781D+00 -0.466525D-01 + 3.5470000 -0.368010D-02 0.566682D+00 -0.234968D+00 + 1.5640000 0.208211D-02 0.416433D+00 -0.311337D+00 +P S + 0.4888000 1.0000000 +P S + 0.2266000 1.0000000 +P S + 0.0933100 1.0000000 +P S + 0.0354000 1.0000000 +P P + 1367.0000000 0.421015D-03 -0.100827D-03 + 324.0000000 0.360985D-02 -0.854499D-03 + 104.6000000 0.189217D-01 -0.457116D-02 + 39.3700000 0.705560D-01 -0.170327D-01 + 16.2600000 0.188157D+00 -0.475204D-01 + 7.0560000 0.338709D+00 -0.852786D-01 + 3.1300000 0.381943D+00 -0.109676D+00 + 1.3940000 0.195261D+00 -0.161181D-01 +P P + 0.5179000 1.0000000 +P P + 0.2032000 1.0000000 +P P + 0.0769800 1.0000000 +P P + 0.0272000 1.0000000 +P D + 0.1650000 1.0000000 +P D + 0.4130000 1.0000000 +P D + 1.0360000 1.0000000 +P D + 0.0594000 1.0000000 +P F + 0.2800000 1.0000000 +P F + 0.7030000 1.0000000 +P F + 0.1090000 1.0000000 +P G + 0.5970000 1.0000000 +P G + 0.2500000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +S S + 727800.0000000 0.236025D-04 -0.652179D-05 0.189406D-05 + 109000.0000000 0.183482D-03 -0.506631D-04 0.146948D-04 + 24800.0000000 0.964278D-03 -0.266833D-03 0.775460D-04 + 7014.0000000 0.406537D-02 -0.112601D-02 0.326509D-03 + 2278.0000000 0.146973D-01 -0.411186D-02 0.119686D-02 + 814.7000000 0.465081D-01 -0.132454D-01 0.384799D-02 + 313.4000000 0.125508D+00 -0.377004D-01 0.110539D-01 + 127.7000000 0.268433D+00 -0.898554D-01 0.264645D-01 + 54.4800000 0.384809D+00 -0.167098D+00 0.508771D-01 + 23.8500000 0.265372D+00 -0.169354D+00 0.530030D-01 + 9.4280000 0.437326D-01 0.127824D+00 -0.425518D-01 + 4.2900000 -0.378807D-02 0.564862D+00 -0.250853D+00 + 1.9090000 0.218083D-02 0.431767D+00 -0.333152D+00 +S S + 0.6270000 1.0000000 +S S + 0.2873000 1.0000000 +S S + 0.1172000 1.0000000 +S S + 0.0428000 1.0000000 +S P + 1546.0000000 0.441183D-03 -0.113110D-03 + 366.4000000 0.377571D-02 -0.958581D-03 + 118.4000000 0.198360D-01 -0.513471D-02 + 44.5300000 0.742063D-01 -0.192641D-01 + 18.3800000 0.197327D+00 -0.535980D-01 + 7.9650000 0.351851D+00 -0.960333D-01 + 3.5410000 0.378687D+00 -0.118183D+00 + 1.5910000 0.170931D+00 0.923194D-02 +S P + 0.6205000 1.0000000 +S P + 0.2420000 1.0000000 +S P + 0.0901400 1.0000000 +S P + 0.0317000 1.0000000 +S D + 0.2030000 1.0000000 +S D + 0.5040000 1.0000000 +S D + 1.2500000 1.0000000 +S D + 0.0748000 1.0000000 +S F + 0.3350000 1.0000000 +S F + 0.8690000 1.0000000 +S F + 0.1400000 1.0000000 +S G + 0.6830000 1.0000000 +S G + 0.2970000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Cl S + 834900.0000000 0.231688D-04 -0.649649D-05 0.196645D-05 + 125000.0000000 0.180154D-03 -0.504895D-04 0.152620D-04 + 28430.0000000 0.947782D-03 -0.266113D-03 0.806086D-04 + 8033.0000000 0.400139D-02 -0.112499D-02 0.339960D-03 + 2608.0000000 0.144629D-01 -0.410497D-02 0.124551D-02 + 933.9000000 0.456586D-01 -0.131987D-01 0.399612D-02 + 360.0000000 0.123248D+00 -0.375342D-01 0.114751D-01 + 147.0000000 0.264369D+00 -0.897233D-01 0.275504D-01 + 62.8800000 0.382989D+00 -0.167671D+00 0.532917D-01 + 27.6000000 0.270934D+00 -0.174763D+00 0.571246D-01 + 11.0800000 0.471404D-01 0.114909D+00 -0.395201D-01 + 5.0750000 -0.371766D-02 0.563618D+00 -0.264343D+00 + 2.2780000 0.219158D-02 0.441606D+00 -0.349291D+00 +Cl S + 0.7775000 1.0000000 +Cl S + 0.3527000 1.0000000 +Cl S + 0.1431000 1.0000000 +Cl S + 0.0519000 1.0000000 +Cl P + 1703.0000000 0.474039D-03 -0.128266D-03 + 403.6000000 0.406412D-02 -0.109356D-02 + 130.3000000 0.213355D-01 -0.583429D-02 + 49.0500000 0.794611D-01 -0.219258D-01 + 20.2600000 0.208927D+00 -0.601385D-01 + 8.7870000 0.364945D+00 -0.106929D+00 + 3.9190000 0.371725D+00 -0.122454D+00 + 1.7650000 0.146292D+00 0.383619D-01 +Cl P + 0.7207000 1.0000000 +Cl P + 0.2839000 1.0000000 +Cl P + 0.1060000 1.0000000 +Cl P + 0.0376000 1.0000000 +Cl D + 0.2540000 1.0000000 +Cl D + 0.6280000 1.0000000 +Cl D + 1.5510000 1.0000000 +Cl D + 0.0952000 1.0000000 +Cl F + 0.4230000 1.0000000 +Cl F + 1.0890000 1.0000000 +Cl F + 0.2170000 1.0000000 +Cl G + 0.8270000 1.0000000 +Cl G + 0.3780000 1.0000000 +#BASIS SET: (17s,12p,4d,3f,2g) -> [7s,6p,4d,3f,2g] +Ar S + 950600.0000000 0.227545D-04 -0.646201D-05 0.202056D-05 + 142300.0000000 0.176945D-03 -0.502346D-04 0.156851D-04 + 32360.0000000 0.931282D-03 -0.264804D-03 0.828617D-04 + 9145.0000000 0.392860D-02 -0.111895D-02 0.349264D-03 + 2970.0000000 0.142064D-01 -0.408276D-02 0.127976D-02 + 1064.0000000 0.448114D-01 -0.131216D-01 0.410365D-02 + 410.8000000 0.121001D+00 -0.372855D-01 0.117789D-01 + 168.0000000 0.260579D+00 -0.894709D-01 0.283868D-01 + 71.9900000 0.381364D+00 -0.168054D+00 0.552406D-01 + 31.6700000 0.276058D+00 -0.179594D+00 0.607492D-01 + 12.8900000 0.505179D-01 0.102953D+00 -0.362012D-01 + 5.9290000 -0.359866D-02 0.562630D+00 -0.275398D+00 + 2.6780000 0.218798D-02 0.450355D+00 -0.362845D+00 +Ar S + 0.9416000 1.0000000 +Ar S + 0.4239000 1.0000000 +Ar S + 0.1714000 1.0000000 +Ar S + 0.0610000 1.0000000 +Ar P + 1890.0000000 0.495752D-03 -0.138863D-03 + 447.8000000 0.425172D-02 -0.118870D-02 + 144.6000000 0.223277D-01 -0.632553D-02 + 54.4600000 0.830878D-01 -0.238813D-01 + 22.5100000 0.217110D+00 -0.649238D-01 + 9.7740000 0.374507D+00 -0.115444D+00 + 4.3680000 0.366445D+00 -0.123651D+00 + 1.9590000 0.129245D+00 0.649055D-01 +Ar P + 0.8260000 1.0000000 +Ar P + 0.3297000 1.0000000 +Ar P + 0.1242000 1.0000000 +Ar P + 0.0435000 1.0000000 +Ar D + 0.3110000 1.0000000 +Ar D + 0.7630000 1.0000000 +Ar D + 1.8730000 1.0000000 +Ar D + 0.1160000 1.0000000 +Ar F + 0.5430000 1.0000000 +Ar F + 1.3250000 1.0000000 +Ar F + 0.2940000 1.0000000 +Ar G + 1.0070000 1.0000000 +Ar G + 0.4590000 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Sc S + 8417909.0000000 1.981292E-06 -1.147926E-06 2.221960E-07 -5.350285E-08 -9.140993E-08 -1.445075E-07 -1.607992E-07 + 1260312.0000000 1.540697E-05 -8.929259E-06 1.729799E-06 -4.164419E-07 -7.270775E-07 -1.167681E-06 -1.216461E-06 + 286798.4000000 8.106065E-05 -4.696382E-05 9.088001E-06 -2.188499E-06 -3.702449E-06 -5.810201E-06 -6.659894E-06 + 81234.6900000 0.0003423943 -0.0001985315 3.848622E-05 -9.264628E-06 -1.633468E-05 -2.64162E-05 -2.670499E-05 + 26503.1100000 0.00124699 -0.0007230932 0.0001399997 -3.371711E-05 -5.64236E-05 -8.781407E-05 -0.0001039947 + 9568.7010000 0.004056425 -0.002358822 0.0004585975 -0.0001103886 -0.000196819 -0.0003207912 -0.0003133995 + 3732.4970000 0.01200596 -0.007008148 0.001364588 -0.0003287051 -0.0005428811 -0.000836375 -0.001029884 + 1548.4220000 0.03235944 -0.01912407 0.003773739 -0.000908425 -0.001642692 -0.00270364 -0.002530633 + 675.5420000 0.07819972 -0.04728922 0.009493887 -0.002288204 -0.003709752 -0.00563396 -0.007335917 + 307.2522000 0.1617396 -0.1032480 0.02174611 -0.005238462 -0.009699229 -0.01622651 -0.01414587 + 144.6672000 0.2618480 -0.1861960 0.04228528 -0.01021547 -0.0158935 -0.02336426 -0.03451496 + 70.0438700 0.2748284 -0.2480547 0.0654061 -0.01581707 -0.03149937 -0.05523292 -0.03859251 + 34.3225000 0.1419647 -0.1614781 0.04759732 -0.01162945 -0.0115392 -0.008807771 -0.05560506 + 15.6122400 0.07046176 0.1779183 -0.0816033 0.02013432 0.01426789 -0.0002060869 0.1025062 + 7.7437220 0.1288392 0.5324076 -0.3283980 0.08405086 0.1977719 0.3882857 0.2265527 + 3.8442600 0.09269352 0.3752830 -0.3654561 0.0984825 0.09493216 0.0974343 0.6017289 + 1.7197660 0.01229949 0.05198123 0.2102218 -0.06838523 0.0267895 0.006858569 -1.4029740 + 0.8325230 -0.0004588239 -0.004029053 0.6856793 -0.2353627 -0.9351082 -2.3215700 -0.8478364 + 0.3855640 0.0001722703 0.0003794092 0.3684308 -0.2776984 0.1820725 2.6665800 3.0947890 + 0.0967000 -5.410745E-05 -0.0004006692 0.02050798 0.2987423 2.0774230 0.1898281 -5.7927330 + 0.0477780 4.892875E-05 0.0003219248 -0.006410776 0.6193723 -1.1139440 -2.6840650 6.9441580 +Sc S + 0.0223630 1.0000000 +Sc S + 0.0104700 1.0000000 +Sc P + 22640.9700000 0.0000120 -0.0000040 0.0000010 0.0000010 0.0000020 -0.0000020 + 5357.5450000 0.0001070 -0.0000350 0.0000090 0.0000100 0.0000200 -0.0000290 + 1740.3730000 0.0006250 -0.0002050 0.0000500 0.0000600 0.0001280 -0.0001300 + 666.6163000 0.0028300 -0.0009320 0.0002270 0.0002740 0.0005340 -0.0007520 + 283.6384000 0.0105300 -0.0034840 0.0008530 0.0010250 0.0021640 -0.0022120 + 129.7976000 0.0328810 -0.0110190 0.0026860 0.0032500 0.0063070 -0.0088930 + 62.6795600 0.0858840 -0.0294150 0.0072250 0.0086740 0.0183770 -0.0182620 + 31.5044100 0.1800300 -0.0637130 0.0155900 0.0188660 0.0360160 -0.0530410 + 16.2352500 0.2892240 -0.1060850 0.0263030 0.0314660 0.0694300 -0.0599390 + 8.5183240 0.3279100 -0.1286380 0.0317770 0.0386630 0.0719490 -0.1556420 + 4.5190050 0.2101980 -0.0530120 0.0124830 0.0149230 0.0577890 0.0095720 + 2.3665910 0.0546800 0.1740260 -0.0526270 -0.0596700 -0.1752840 0.0918980 + 1.2152350 0.0018530 0.3925500 -0.1140250 -0.1347060 -0.3373290 1.2567100 + 0.6143480 -0.0014170 0.3965140 -0.1463710 -0.1728090 -0.5644270 -1.0111150 + 0.3007450 -0.0009530 0.1765440 -0.0138630 -0.0806980 1.1633800 -1.3688360 + 0.1260040 -0.0000510 0.0191110 0.3524440 0.5542640 0.5658350 2.3777820 + 0.0548400 -0.0000210 0.0000750 0.5504540 0.5500070 -0.9715060 -1.1539840 +Sc P + 0.0235570 1.0000000 +Sc P + 0.0101200 1.0000000 +Sc D + 145.4680000 0.0004940 -0.0005050 -0.0006670 0.0008360 + 43.4188000 0.0041980 -0.0042930 -0.0055930 0.0084950 + 16.5768000 0.0189670 -0.0194750 -0.0259900 0.0334810 + 6.9711100 0.0584080 -0.0606310 -0.0791400 0.1270110 + 3.1334700 0.1376050 -0.1436610 -0.1936220 0.2482810 + 1.4576800 0.2314700 -0.2292940 -0.2899810 0.4455630 + 0.6745380 0.2965300 -0.2619730 -0.1702510 -0.5406450 + 0.3051620 0.3052000 -0.0530060 0.6126870 -0.8783940 + 0.1341130 0.2380750 0.4119990 0.4817940 1.4431180 + 0.0572700 0.1073860 0.4831900 -0.6794480 -0.4690810 +Sc D + 0.0233540 1.0000000 +Sc D + 0.0095200 1.0000000 +Sc F + 1.4167000 1.0000000 +Sc F + 0.3992000 1.0000000 +Sc F + 0.1125000 1.0000000 +Sc F + 0.0312800 1.0000000 +Sc G + 0.9963000 1.0000000 +Sc G + 0.2573000 1.0000000 +Sc G + 0.0723600 1.0000000 +Sc H + 0.5016000 1.0000000 +Sc H + 0.1226400 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Ti S + 9317034.0000000 1.967884E-06 -1.130007E-06 2.252735E-07 -5.318433E-08 -9.711872E-08 -1.533644E-07 -1.764526E-07 + 1394971.0000000 1.530198E-05 -8.789416E-06 1.753631E-06 -4.139855E-07 -7.73397E-07 -1.234295E-06 -1.314401E-06 + 317453.1000000 8.050403E-05 -4.622623E-05 9.213052E-06 -2.175153E-06 -3.931052E-06 -6.177188E-06 -7.355464E-06 + 89921.0000000 0.0003400302 -0.0001954047 3.901242E-05 -9.209567E-06 -1.738323E-05 -2.787253E-05 -2.863762E-05 + 29338.1600000 0.001238349 -0.0007117 0.0001419184 -3.350761E-05 -5.986536E-05 -9.355199E-05 -0.0001156551 + 10592.6600000 0.004028475 -0.002321755 0.0004648635 -0.0001097393 -0.0002095853 -0.0003378352 -0.0003330732 + 4132.0560000 0.01192508 -0.006899511 0.001383544 -0.0003267006 -0.0005756482 -0.0008935475 -0.001155156 + 1714.2350000 0.03215601 -0.01883765 0.003827354 -0.0009036567 -0.001751595 -0.002842353 -0.002659832 + 747.9151000 0.0777862 -0.04663976 0.009639191 -0.002277257 -0.00393512 -0.006052332 -0.008332036 + 340.1991000 0.1612030 -0.1020764 0.02211719 -0.005226756 -0.0103849 -0.0170469 -0.01462611 + 160.2060000 0.2618826 -0.1848693 0.04314954 -0.01021707 -0.0169110 -0.02549806 -0.0403089 + 77.5885100 0.2766541 -0.2479601 0.06703481 -0.01591468 -0.03410989 -0.05791149 -0.03745842 + 38.0448900 0.1442968 -0.1634863 0.04946424 -0.01182814 -0.01220437 -0.01271791 -0.07375959 + 17.3536200 0.06993131 0.1779147 -0.08333456 0.02011999 0.01397535 0.006260762 0.1443268 + 8.6420620 0.1259449 0.5351738 -0.3384435 0.08526584 0.2176212 0.4080306 0.2119031 + 4.3044040 0.0902583 0.3752822 -0.3674069 0.09693489 0.09532708 0.1284258 0.7474187 + 1.9377180 0.01200401 0.05217038 0.2247056 -0.07082672 0.01782524 -0.1231286 -2.0310800 + 0.9365940 -0.0003976168 -0.003863192 0.6878815 -0.2359740 -1.0163420 -2.2673310 0.1922693 + 0.4326240 0.0001425444 0.0002845374 0.3594435 -0.2629613 0.3107026 2.8075070 2.2877680 + 0.1073520 -4.196664E-05 -0.0003500414 0.01933695 0.3011214 1.9917860 -0.3028009 -5.1681350 + 0.0520340 4.824213E-05 0.0003192906 -0.005997819 0.6125074 -1.1429550 -2.0712270 6.4603230 +Ti S + 0.0240380 1.0000000 +Ti S + 0.0111000 1.0000000 +Ti P + 25537.3300000 0.0000120 -0.0000040 0.0000010 0.0000010 0.0000020 -0.0000030 + 6042.2430000 0.0001040 -0.0000350 0.0000080 0.0000100 0.0000200 -0.0000280 + 1962.6530000 0.0006070 -0.0002030 0.0000490 0.0000610 0.0001260 -0.0001340 + 751.7338000 0.0027510 -0.0009250 0.0002210 0.0002750 0.0005260 -0.0007360 + 319.8833000 0.0102660 -0.0034700 0.0008360 0.0010340 0.0021510 -0.0022930 + 146.4300000 0.0321800 -0.0110200 0.0026410 0.0032830 0.0062570 -0.0087520 + 70.7486100 0.0844860 -0.0295770 0.0071510 0.0088290 0.0184550 -0.0192260 + 35.5908800 0.1783320 -0.0645740 0.0155300 0.0193080 0.0362470 -0.0525890 + 18.3689300 0.2885740 -0.1084580 0.0264790 0.0326120 0.0709200 -0.0658940 + 9.6586550 0.3287580 -0.1319100 0.0319800 0.0399770 0.0718270 -0.1481120 + 5.1367300 0.2115410 -0.0530890 0.0125610 0.0152990 0.0592010 -0.0241240 + 2.6988720 0.0555190 0.1781250 -0.0529940 -0.0626200 -0.1842720 0.1769790 + 1.3897030 0.0020200 0.3957010 -0.1130390 -0.1382880 -0.3296530 1.1584280 + 0.7031630 -0.0014290 0.3927280 -0.1436980 -0.1763480 -0.5457640 -0.9634580 + 0.3441230 -0.0009410 0.1744770 -0.0103360 -0.0554040 1.1454310 -1.3245080 + 0.1413610 -0.0000530 0.0189460 0.3547360 0.5592910 0.5526250 2.2913730 + 0.0608630 -0.0000170 -0.0003280 0.5481010 0.5331150 -0.9642600 -1.1129320 +Ti P + 0.0259070 1.0000000 +Ti P + 0.0110300 1.0000000 +Ti D + 196.9490000 0.0003820 -0.0003880 -0.0006220 -0.0006960 + 58.8372000 0.0033680 -0.0034280 -0.0054930 -0.0070890 + 22.5654000 0.0162420 -0.0165980 -0.0269680 -0.0310130 + 9.5756600 0.0523770 -0.0541720 -0.0895330 -0.1200550 + 4.3185900 0.1299280 -0.1366600 -0.2283740 -0.2789100 + 2.0232700 0.2312330 -0.2294490 -0.3312580 -0.3789610 + 0.9467780 0.3035610 -0.2549950 -0.1063490 0.5737430 + 0.4338760 0.3092680 -0.0476610 0.6310360 0.7279500 + 0.1922740 0.2316440 0.3948800 0.3966210 -1.2976560 + 0.0815020 0.1015400 0.4964530 -0.6180090 0.3203760 +Ti D + 0.0322850 1.0000000 +Ti D + 0.0127900 1.0000000 +Ti F + 2.2626000 1.0000000 +Ti F + 0.6418000 1.0000000 +Ti F + 0.1821000 1.0000000 +Ti F + 0.0554100 1.0000000 +Ti G + 1.5732000 1.0000000 +Ti G + 0.4002000 1.0000000 +Ti G + 0.1256600 1.0000000 +Ti H + 0.8721000 1.0000000 +Ti H + 0.2724200 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +V S + 10251780.0000000 1.966291E-06 -1.100923E-06 2.278854E-07 -5.275948E-08 -1.003479E-07 -1.592148E-07 -1.885199E-07 + 1534920.0000000 1.528967E-05 -8.56325E-06 1.773942E-06 -4.107129E-07 -7.997061E-07 -1.278305E-06 -1.39455E-06 + 349300.9000000 8.043932E-05 -4.503678E-05 9.319992E-06 -2.157711E-06 -4.060397E-06 -6.420097E-06 -7.881519E-06 + 98942.0500000 0.0003397617 -0.0001903808 3.946449E-05 -9.13722E-06 -1.79807E-05 -2.883633E-05 -3.027981E-05 + 32281.3600000 0.001237405 -0.0006934284 0.000143572 -3.323885E-05 -6.18137E-05 -9.73589E-05 -0.000124316 + 11655.2700000 0.00402574 -0.002262429 0.0004702911 -0.0001088925 -0.0002168915 -0.0003491402 -0.0003507231 + 4546.5480000 0.01191912 -0.006724991 0.001399998 -0.0003241407 -0.0005942417 -0.0009316194 -0.00124644 + 1886.1850000 0.03215431 -0.01837325 0.003874111 -0.0008972319 -0.001814506 -0.002934959 -0.00278742 + 822.9417000 0.07785452 -0.0455526 0.009765942 -0.002262105 -0.004064807 -0.006333703 -0.009045618 + 374.3439000 0.1616367 -0.09996969 0.02244179 -0.005203068 -0.01079223 -0.01760698 -0.01522967 + 176.3069000 0.2634194 -0.1819111 0.04390091 -0.01019123 -0.01752264 -0.02696848 -0.04437496 + 85.4066100 0.2799986 -0.2458744 0.06843462 -0.0159482 -0.03573873 -0.05982079 -0.03793507 + 41.9043500 0.1473474 -0.1638089 0.0509650 -0.01193588 -0.01263079 -0.01545613 -0.08564216 + 19.1552500 0.06826405 0.1795843 -0.0853594 0.02018344 0.01393494 0.01103001 0.1715635 + 9.5716170 0.1194436 0.5389547 -0.3474804 0.08610071 0.2305046 0.4234006 0.2192374 + 4.7800860 0.08507582 0.3749098 -0.3672368 0.09487917 0.0936574 0.1454088 0.8190393 + 2.1618600 0.01125814 0.05200269 0.2385408 -0.07309753 0.00782896 -0.2197140 -2.4396980 + 1.0427110 -0.0003353521 -0.003775873 0.6888178 -0.2349632 -1.0538540 -2.1943290 0.9048685 + 0.4802820 0.0001070571 0.0001686888 0.3509919 -0.2500297 0.3865591 2.8574410 1.7069230 + 0.1176380 -2.979622E-05 -0.0003063802 0.01826144 0.3026096 1.9257830 -0.5832475 -4.6758140 + 0.0561740 4.672816E-05 0.0003238096 -0.005541134 0.6061635 -1.1464290 -1.6928450 6.0487340 +V S + 0.0256610 1.0000000 +V S + 0.0117200 1.0000000 +V P + 28563.3200000 0.0000110 -0.0000040 0.0000010 0.0000010 0.0000020 -0.0000030 + 6757.1910000 0.0001010 -0.0000340 0.0000080 0.0000100 0.0000200 -0.0000290 + 2194.6520000 0.0005920 -0.0002020 0.0000490 0.0000600 0.0001290 -0.0001410 + 840.5257000 0.0026900 -0.0009200 0.0002210 0.0002750 0.0005360 -0.0007730 + 357.6666000 0.0100630 -0.0034590 0.0008380 0.0010330 0.0022030 -0.0024220 + 163.7534000 0.0316540 -0.0110250 0.0026560 0.0032960 0.0064280 -0.0092670 + 79.1446600 0.0834780 -0.0297320 0.0072330 0.0088960 0.0190710 -0.0205550 + 39.8385800 0.1772260 -0.0653490 0.0158080 0.0196130 0.0377120 -0.0564850 + 20.5853600 0.2883980 -0.1105270 0.0271720 0.0333180 0.0742670 -0.0714930 + 10.8430700 0.3294320 -0.1345370 0.0328010 0.0410090 0.0752600 -0.1577910 + 5.7779690 0.2121300 -0.0524370 0.0123380 0.0149590 0.0609980 -0.0215520 + 3.0431700 0.0558820 0.1822160 -0.0554180 -0.0642560 -0.2009760 0.2379500 + 1.5702390 0.0020970 0.3980180 -0.1156040 -0.1418170 -0.3453430 1.1318370 + 0.7949750 -0.0014710 0.3891530 -0.1390920 -0.1739660 -0.5018350 -1.0891800 + 0.3889800 -0.0009480 0.1727170 0.0006820 -0.0411320 1.1436310 -1.1257730 + 0.1573270 -0.0000550 0.0187460 0.3520090 0.5639950 0.5044870 2.1681890 + 0.0665660 -0.0000130 -0.0005940 0.5422050 0.5238960 -0.9441030 -1.1102630 +V P + 0.0278610 1.0000000 +V P + 0.0116600 1.0000000 +V D + 238.0090000 0.0003500 -0.0003700 -0.0005750 0.0007340 + 71.1896000 0.0031300 -0.0033170 -0.0051570 0.0072580 + 27.3946000 0.0154780 -0.0164740 -0.0259290 0.0339580 + 11.7173000 0.0508290 -0.0548390 -0.0880590 0.1298550 + 5.3248000 0.1275480 -0.1408390 -0.2311790 0.3316480 + 2.5169800 0.2304470 -0.2395530 -0.3383520 0.3569830 + 1.1907500 0.3040580 -0.2519100 -0.0850300 -0.6934390 + 0.5518090 0.3083660 -0.0261060 0.6267990 -0.5768500 + 0.2469260 0.2290220 0.3877700 0.3834730 1.2280290 + 0.1051000 0.1013600 0.4867240 -0.6102620 -0.3167410 +V D + 0.0413930 1.0000000 +V D + 0.0163000 1.0000000 +V F + 3.0648000 1.0000000 +V F + 0.8840000 1.0000000 +V F + 0.2550000 1.0000000 +V F + 0.0818500 1.0000000 +V G + 2.1538000 1.0000000 +V G + 0.5645000 1.0000000 +V G + 0.1933900 1.0000000 +V H + 1.3165000 1.0000000 +V H + 0.4711900 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Cr S + 11016640.0000000 2.002522E-06 -1.118844E-06 2.358227E-07 -5.343793E-08 -1.038573E-07 -1.671645E-07 -2.018526E-07 + 1649423.0000000 1.557145E-05 -8.70279E-06 1.83614E-06 -4.166295E-07 -8.291687E-07 -1.331951E-06 -1.476099E-06 + 375358.9000000 8.192146E-05 -4.576974E-05 9.643686E-06 -2.183977E-06 -4.198902E-06 -6.764614E-06 -8.479016E-06 + 106323.6000000 0.0003460132 -0.0001934803 4.085166E-05 -9.275174E-06 -1.865777E-05 -2.994507E-05 -3.186673E-05 + 34689.7600000 0.001260141 -0.0007046922 0.0001485404 -3.361788E-05 -6.386131E-05 -0.000102993 -0.0001344019 + 12524.8300000 0.004099273 -0.002299139 0.0004868639 -0.0001106225 -0.0002252576 -0.0003611865 -0.0003665342 + 4885.7520000 0.01213424 -0.006833193 0.001448156 -0.0003275214 -0.0006131653 -0.0009903414 -0.001355222 + 2026.9180000 0.03271636 -0.01866493 0.004010503 -0.0009122671 -0.001886356 -0.003022002 -0.002884635 + 884.3645000 0.07912296 -0.04624835 0.01009579 -0.002281936 -0.004185316 -0.006778242 -0.009908511 + 402.3170000 0.1638397 -0.1013820 0.02321493 -0.005294506 -0.01123172 -0.01798719 -0.01547488 + 189.5271000 0.2655107 -0.1839390 0.04524056 -0.01022548 -0.01791544 -0.02926094 -0.04925232 + 91.8609500 0.2789671 -0.2469356 0.07025001 -0.01618464 -0.03714198 -0.05950832 -0.03533906 + 45.1247600 0.1444466 -0.1597390 0.05032135 -0.01124211 -0.01126485 -0.02030054 -0.09963499 + 20.6251200 0.06941606 0.1940936 -0.09350992 0.02096236 0.01522975 0.02995049 0.2140183 + 10.3197300 0.1195153 0.5461479 -0.3650249 0.09050667 0.2458640 0.4202560 0.2137561 + 5.1577230 0.08084582 0.3610571 -0.3530889 0.08642079 0.07882802 0.1844826 0.8609798 + 2.3126280 0.009975024 0.04658647 0.2829720 -0.0785363 -0.01862956 -0.4526654 -2.9258430 + 1.1030790 -0.000286577 -0.003493969 0.7001955 -0.2526007 -1.0962620 -1.8921570 1.9665580 + 0.4980420 0.0001176051 0.0002600074 0.3067473 -0.2133579 0.5510966 2.8485940 0.7515651 + 0.1182470 -2.164013E-05 -0.00024401 0.01083139 0.3577908 1.8947270 -1.1247750 -4.1073970 + 0.0573560 5.032702E-05 0.0003266435 -0.001458427 0.5691145 -1.3157730 -0.9810669 5.7017810 +Cr S + 0.0257600 1.0000000 +Cr S + 0.0115700 1.0000000 +Cr P + 31539.8900000 0.0000110 -0.0000040 0.0000010 0.0000010 0.0000030 -0.0000030 + 7460.2340000 0.0001000 -0.0000350 0.0000080 0.0000100 0.0000210 -0.0000310 + 2422.6220000 0.0005870 -0.0002030 0.0000480 0.0000610 0.0001340 -0.0001500 + 927.7547000 0.0026670 -0.0009260 0.0002180 0.0002770 0.0005590 -0.0008150 + 394.8041000 0.0099910 -0.0034870 0.0008270 0.0010410 0.0022970 -0.0025830 + 180.8027000 0.0314930 -0.0111410 0.0026260 0.0033380 0.0067270 -0.0098130 + 87.4239300 0.0832660 -0.0301280 0.0071720 0.0090130 0.0199900 -0.0221160 + 44.0342700 0.1773280 -0.0664840 0.0157380 0.0200130 0.0397890 -0.0602960 + 22.7770400 0.2892300 -0.1128540 0.0271540 0.0340000 0.0784260 -0.0781870 + 12.0154700 0.3296730 -0.1367850 0.0326310 0.0419930 0.0798820 -0.1674430 + 6.4117510 0.2108870 -0.0500570 0.0114930 0.0138040 0.0609720 -0.0135230 + 3.3811360 0.0551740 0.1884690 -0.0560770 -0.0662750 -0.2226880 0.3066960 + 1.7470540 0.0022300 0.4004550 -0.1142520 -0.1461070 -0.3668130 1.0907830 + 0.8850040 -0.0012840 0.3843320 -0.1337370 -0.1694750 -0.4471090 -1.2345450 + 0.4330280 -0.0008540 0.1695200 0.0034730 -0.0285870 1.1518010 -0.9015550 + 0.1734150 -0.0000460 0.0182570 0.3451660 0.5663070 0.4413050 2.0482660 + 0.0726080 -0.0000120 -0.0007430 0.5418440 0.5156880 -0.9140660 -1.1039840 +Cr P + 0.0299150 1.0000000 +Cr P + 0.0123300 1.0000000 +Cr D + 268.0400000 0.0003600 -0.0004070 -0.0005820 0.0008280 + 80.2223000 0.0032360 -0.0036770 -0.0052760 0.0080720 + 30.8950000 0.0161530 -0.0184220 -0.0267230 0.0389600 + 13.2481000 0.0534180 -0.0620500 -0.0920120 0.1497060 + 6.0407700 0.1335240 -0.1589460 -0.2423410 0.3879330 + 2.8615900 0.2386370 -0.2629000 -0.3383560 0.2970340 + 1.3554500 0.3094550 -0.2438830 -0.0138860 -0.8758060 + 0.6282480 0.3056910 0.0377400 0.6731700 -0.2958520 + 0.2806230 0.2182890 0.4270640 0.2610890 1.2044240 + 0.1186680 0.0896930 0.4428120 -0.6613960 -0.5298930 +Cr D + 0.0459310 1.0000000 +Cr D + 0.0177800 1.0000000 +Cr F + 3.7611000 1.0000000 +Cr F + 1.0928000 1.0000000 +Cr F + 0.3175000 1.0000000 +Cr F + 0.1037300 1.0000000 +Cr G + 2.6143000 1.0000000 +Cr G + 0.6951000 1.0000000 +Cr G + 0.2454500 1.0000000 +Cr H + 1.6775000 1.0000000 +Cr H + 0.6329200 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Mn S + 12210500.0000000 2.018537E-06 -9.633574E-07 2.316977E-07 -5.127786E-08 -1.017421E-07 -1.64232E-07 -2.001522E-07 + 1828157.0000000 1.569638E-05 -7.493672E-06 1.803633E-06 -3.991995E-07 -8.110718E-07 -1.314241E-06 -1.478765E-06 + 416030.3000000 8.257853E-05 -3.941004E-05 9.476176E-06 -2.097137E-06 -4.116344E-06 -6.63284E-06 -8.372432E-06 + 117843.6000000 0.0003488107 -0.0001666155 4.012553E-05 -8.881375E-06 -1.823899E-05 -2.96042E-05 -3.208892E-05 + 38448.1400000 0.001270414 -0.0006069041 0.000145987 -3.230705E-05 -6.265924E-05 -0.0001007673 -0.0001321413 + 13881.7100000 0.004133905 -0.001981108 0.0004782368 -0.0001058611 -0.0002200741 -0.0003579039 -0.0003714493 + 5415.0020000 0.01224366 -0.005893486 0.001424063 -0.0003151614 -0.0006024678 -0.0009666897 -0.001326456 + 2246.4600000 0.0330604 -0.01613849 0.003942807 -0.0008730066 -0.0018430 -0.003005179 -0.002951265 + 980.1463000 0.08019877 -0.04018929 0.009952411 -0.002203528 -0.004127938 -0.006605816 -0.009655762 + 445.8952000 0.1671550 -0.08903423 0.0229242 -0.005081761 -0.01100471 -0.0180382 -0.01616919 + 210.0558000 0.2743977 -0.1646993 0.04501638 -0.009988834 -0.0179012 -0.02853084 -0.04776647 + 101.8046000 0.2963690 -0.2288840 0.07048742 -0.01570961 -0.03676227 -0.06124413 -0.04049212 + 50.0112600 0.1592852 -0.1560684 0.05291064 -0.01183955 -0.01301427 -0.01893791 -0.09389925 + 22.9393900 0.05681818 0.1882585 -0.08983951 0.02031039 0.01478153 0.01888653 0.1920182 + 11.5226400 0.0827899 0.5512725 -0.3626155 0.08593055 0.2391713 0.4329357 0.2440487 + 5.7763380 0.05840628 0.3755111 -0.3621266 0.08897427 0.08964957 0.1661622 0.8589060 + 2.6259590 0.007343047 0.05061607 0.2656979 -0.07678891 -0.01299627 -0.3401427 -2.7931450 + 1.2603220 -0.0002934793 -0.004926193 0.6892091 -0.2261750 -1.0513300 -2.0393200 1.5640690 + 0.5771300 -4.562245E-05 -0.0006126838 0.3337072 -0.2271869 0.4478536 2.7946610 1.1184620 + 0.1365820 -9.934988E-06 -0.0002821975 0.01594677 0.3003127 1.8048060 -0.7303582 -4.0546640 + 0.0635350 2.391143E-05 0.0003009192 -0.004614546 0.5953419 -1.0710260 -1.4080030 5.4620540 +Mn S + 0.0285210 1.0000000 +Mn S + 0.0128000 1.0000000 +Mn P + 35005.1200000 0.0000110 -0.0000040 -0.0000010 0.0000010 0.0000030 -0.0000030 + 8279.4620000 0.0000980 -0.0000340 -0.0000080 0.0000100 0.0000210 -0.0000320 + 2688.4650000 0.0005720 -0.0001990 -0.0000460 0.0000610 0.0001380 -0.0001650 + 1029.4900000 0.0026040 -0.0009070 -0.0002080 0.0002780 0.0005680 -0.0008520 + 438.0708000 0.0097790 -0.0034250 -0.0007920 0.0010520 0.0023680 -0.0028640 + 200.6153000 0.0309380 -0.0109850 -0.0025220 0.0033660 0.0068870 -0.0103380 + 97.0076900 0.0821940 -0.0298560 -0.0069280 0.0091930 0.0208050 -0.0249200 + 48.8705200 0.1761490 -0.0663660 -0.0152920 0.0204040 0.0412070 -0.0639080 + 25.2928100 0.2891330 -0.1135040 -0.0266110 0.0352770 0.0829490 -0.0917040 + 13.3538200 0.3309560 -0.1379910 -0.0319780 0.0429860 0.0823300 -0.1688330 + 7.1317860 0.2122180 -0.0493550 -0.0112220 0.0147830 0.0676490 -0.0457170 + 3.7643650 0.0552270 0.1912420 0.0549880 -0.0708510 -0.2505870 0.4475430 + 1.9462650 0.0012070 0.4023550 0.1104650 -0.1488630 -0.3787840 1.0445440 + 0.9854550 -0.0023550 0.3821160 0.1281620 -0.1726610 -0.3965170 -1.4857210 + 0.4818650 -0.0013200 0.1681990 -0.0029800 -0.0048570 1.1501120 -0.5306040 + 0.1892120 -0.0000940 0.0179050 -0.3368240 0.5718810 0.3830850 1.8217180 + 0.0779800 -0.0000070 -0.0009580 -0.5424410 0.5013280 -0.8923280 -1.0684500 +Mn P + 0.0316850 1.0000000 +Mn P + 0.0128700 1.0000000 +Mn D + 301.4270000 0.0003610 -0.0003670 -0.0005810 -0.0007460 + 90.3288000 0.0032590 -0.0033310 -0.0053040 -0.0068580 + 34.8337000 0.0164190 -0.0168130 -0.0270190 -0.0350360 + 14.9770000 0.0547600 -0.0569290 -0.0940670 -0.1265920 + 6.8498300 0.1367270 -0.1457700 -0.2469380 -0.3598640 + 3.2521700 0.2424190 -0.2466730 -0.3420510 -0.3065310 + 1.5430900 0.3103760 -0.2342270 -0.0146210 0.7526320 + 0.7156410 0.3021700 0.0233200 0.6120700 0.4176590 + 0.3193230 0.2135730 0.3875770 0.3201120 -1.0728320 + 0.1344280 0.0890940 0.4676950 -0.5609790 0.2000430 +Mn D + 0.0515700 1.0000000 +Mn D + 0.0197800 1.0000000 +Mn F + 4.4646000 1.0000000 +Mn F + 1.3133000 1.0000000 +Mn F + 0.3863000 1.0000000 +Mn F + 0.1282900 1.0000000 +Mn G + 3.1668000 1.0000000 +Mn G + 0.8651000 1.0000000 +Mn G + 0.3184100 1.0000000 +Mn H + 2.0003000 1.0000000 +Mn H + 0.7767100 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Fe S + 0.1327714E+08 1.976511E-06 -1.020185E-06 2.340322E-07 -5.062297E-08 -9.957952E-08 -1.678013E-07 -1.97919E-07 + 1987888.0000000 1.536912E-05 -7.935347E-06 1.821727E-06 -3.940586E-07 -7.925506E-07 -1.337004E-06 -1.454458E-06 + 452387.1000000 8.085571E-05 -4.173309E-05 9.571315E-06 -2.07034E-06 -4.031635E-06 -6.790249E-06 -8.296892E-06 + 128143.7000000 0.0003415253 -0.0001764249 4.052652E-05 -8.766406E-06 -1.780938E-05 -3.005871E-05 -3.147678E-05 + 41809.1700000 0.001243883 -0.0006426379 0.0001474531 -3.189537E-05 -6.14201E-05 -0.0001033899 -0.0001312505 + 15095.3300000 0.004047547 -0.00209744 0.0004830333 -0.0001044911 -0.00021473 -0.0003626365 -0.0003631851 + 5888.4380000 0.01198848 -0.00623875 0.001438609 -0.0003112113 -0.0005912544 -0.0009947359 -0.001321103 + 2442.8760000 0.03237358 -0.01707492 0.003983915 -0.0008620181 -0.001797193 -0.003038134 -0.002874345 + 1065.8570000 0.07854828 -0.0424857 0.01006355 -0.002178129 -0.004061089 -0.006831095 -0.009655667 + 484.9096000 0.1637396 -0.09392294 0.0232061 -0.00502697 -0.01073419 -0.01819172 -0.01565078 + 228.4585000 0.2687335 -0.1730554 0.0456678 -0.009908113 -0.01773464 -0.02987575 -0.0481821 + 110.7453000 0.2896317 -0.2386626 0.07169322 -0.01561357 -0.03586338 -0.06129076 -0.03801945 + 54.4311600 0.1554235 -0.1623971 0.05421018 -0.01187731 -0.01374002 -0.02302594 -0.09789664 + 25.0109600 0.06284331 0.1869345 -0.09163776 0.02031246 0.01645324 0.02701671 0.1990898 + 12.5926200 0.09927972 0.5495686 -0.3693219 0.08560291 0.2322749 0.4229967 0.2020013 + 6.3232020 0.06931444 0.3723118 -0.3616033 0.08702717 0.09256802 0.2153088 0.9776064 + 2.8833840 0.008885666 0.05057065 0.2734191 -0.07758197 -0.03322957 -0.4343164 -3.0035790 + 1.3828680 -0.00027762 -0.004072645 0.6889090 -0.2214919 -0.9860290 -1.9503480 1.8016620 + 0.6322010 1.27159E-06 -0.0002732199 0.3294179 -0.2196263 0.4046445 2.7202330 0.9747971 + 0.1492380 -1.537759E-05 -0.0002612296 0.01558687 0.2869893 1.6888890 -0.6123241 -3.8975570 + 0.0684940 2.552339E-05 0.0002547393 -0.004161049 0.5927434 -0.8479093 -1.4683290 5.2279090 +Fe S + 0.0303810 1.0000000 +Fe S + 0.0134800 1.0000000 +Fe P + 38282.0500000 0.0000110 -0.0000040 0.0000010 0.0000010 0.0000030 -0.0000030 + 9061.5560000 0.0000970 -0.0000340 0.0000070 0.0000110 0.0000220 -0.0000330 + 2944.4500000 0.0005660 -0.0001990 0.0000440 0.0000660 0.0001470 -0.0001780 + 1128.1580000 0.0025750 -0.0009110 0.0001970 0.0002950 0.0005980 -0.0008800 + 480.3380000 0.0096760 -0.0034370 0.0007510 0.0011340 0.0025270 -0.0030750 + 220.1368000 0.0306440 -0.0110420 0.0023910 0.0035850 0.0072600 -0.0107140 + 106.5482000 0.0815530 -0.0300610 0.0065950 0.0099500 0.0223000 -0.0269530 + 53.7426200 0.1752450 -0.0670490 0.0145700 0.0218100 0.0435920 -0.0662790 + 27.8631800 0.2884650 -0.1150700 0.0255290 0.0386610 0.0898240 -0.1011440 + 14.7438200 0.3307340 -0.1399170 0.0304850 0.0456280 0.0863280 -0.1704670 + 7.8933510 0.2127700 -0.0494800 0.0108530 0.0179580 0.0797000 -0.0837750 + 4.1794970 0.0562030 0.1917090 -0.0523850 -0.0815930 -0.2943090 0.6056490 + 2.1656690 0.0018070 0.4030120 -0.1032710 -0.1581940 -0.4046430 0.9572390 + 1.0972400 -0.0019990 0.3807170 -0.1212410 -0.1890710 -0.3242020 -1.7348360 + 0.5360850 -0.0011550 0.1693050 0.0008400 0.0446210 1.1898370 -0.0978650 + 0.2023740 -0.0000790 0.0178720 0.3272880 0.6116920 0.2280980 1.5748130 + 0.0817420 -0.0000030 -0.0014330 0.5442260 0.4461700 -0.8474340 -1.0818170 +Fe P + 0.0326620 1.0000000 +Fe P + 0.0130500 1.0000000 +Fe D + 338.5060000 0.0003560 -0.0003910 -0.0005650 -0.0008160 + 101.4920000 0.0032290 -0.0035760 -0.0051850 -0.0071240 + 39.1867000 0.0164140 -0.0181910 -0.0266110 -0.0385600 + 16.9034000 0.0551330 -0.0620900 -0.0930790 -0.1335670 + 7.7629600 0.1375020 -0.1592870 -0.2482970 -0.4152110 + 3.6988700 0.2425950 -0.2697760 -0.3498230 -0.2793690 + 1.7596300 0.3085230 -0.2389970 0.0369220 0.9276650 + 0.8166510 0.2998140 0.0619850 0.6494720 0.1855890 + 0.3638210 0.2150480 0.4136570 0.2342380 -1.0796160 + 0.1525410 0.0925770 0.4348780 -0.6097450 0.4197090 +Fe D + 0.0579910 1.0000000 +Fe D + 0.0220500 1.0000000 +Fe F + 5.1982000 1.0000000 +Fe F + 1.5504000 1.0000000 +Fe F + 0.4624000 1.0000000 +Fe F + 0.1551400 1.0000000 +Fe G + 3.7944000 1.0000000 +Fe G + 1.0668000 1.0000000 +Fe G + 0.4073800 1.0000000 +Fe H + 2.3842000 1.0000000 +Fe H + 0.9587800 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Co S + 0.1437022E+08 1.961579E-06 -1.032046E-06 2.357772E-07 -4.98388E-08 -9.633772E-08 -1.73362E-07 -1.968109E-07 + 2151540.0000000 1.525308E-05 -8.027614E-06 1.8353E-06 -3.879304E-07 -7.654083E-07 -1.376434E-06 -1.439789E-06 + 489625.7000000 8.024671E-05 -4.22193E-05 9.642951E-06 -2.038379E-06 -3.90364E-06 -7.026909E-06 -8.265947E-06 + 138690.3000000 0.0003389582 -0.0001784817 4.082978E-05 -8.630129E-06 -1.718665E-05 -3.089757E-05 -3.108989E-05 + 45249.8900000 0.001234551 -0.0006501411 0.000148563 -3.140519E-05 -5.95264E-05 -0.0001071929 -0.0001310184 + 16337.6200000 0.004017237 -0.002121909 0.0004866688 -0.0001028682 -0.0002070482 -0.0003721161 -0.0003577366 + 6373.0730000 0.01189936 -0.006311755 0.001449618 -0.0003064776 -0.0005737293 -0.001033758 -0.001321726 + 2643.9580000 0.03213721 -0.01727558 0.004015116 -0.0008488581 -0.001731567 -0.003111602 -0.00282163 + 1153.6140000 0.0779997 -0.04299353 0.0101482 -0.002146732 -0.003950029 -0.007127428 -0.009692646 + 524.8606000 0.1626825 -0.09507125 0.02342321 -0.004957499 -0.01033969 -0.01859372 -0.01528143 + 247.3069000 0.2671849 -0.1752212 0.0461722 -0.009792183 -0.01736027 -0.03148302 -0.04871094 + 119.9063000 0.2881411 -0.2416127 0.07262205 -0.01545065 -0.03449074 -0.06222078 -0.03611465 + 58.9642900 0.1548301 -0.1645933 0.0551247 -0.01181794 -0.0142204 -0.02684359 -0.1014559 + 27.1361600 0.06451896 0.1880060 -0.09356803 0.02031574 0.01816713 0.0349936 0.2059185 + 13.6891200 0.1030728 0.5505157 -0.3752066 0.08494754 0.2219044 0.4220093 0.1740209 + 6.8827710 0.07137991 0.3701682 -0.3595010 0.0845587 0.09496945 0.2573147 1.0618960 + 3.1446470 0.009131332 0.05007243 0.2821187 -0.07824438 -0.0535677 -0.5363089 -3.1875120 + 1.5062660 -0.0002919679 -0.003975686 0.6882851 -0.2161403 -0.9071045 -1.8561120 2.0527300 + 0.6872680 -5.581488E-06 -0.0002896409 0.3243680 -0.2120657 0.3491874 2.6514750 0.7962451 + 0.1609720 -1.732351E-05 -0.0002552515 0.01501498 0.2777048 1.5866890 -0.5228775 -3.7309490 + 0.0730170 2.132347E-05 0.0002182807 -0.003906005 0.5886342 -0.6425986 -1.4830860 5.0181100 +Co S + 0.0320710 1.0000000 +Co S + 0.0140900 1.0000000 +Co P + 41961.4000000 0.0000110 -0.0000040 0.0000010 0.0000010 0.0000030 -0.0000040 + 9928.3060000 0.0000950 -0.0000340 0.0000070 0.0000110 0.0000230 -0.0000330 + 3224.9710000 0.0005570 -0.0001980 0.0000440 0.0000690 0.0001500 -0.0001850 + 1235.2930000 0.0025380 -0.0009060 0.0001990 0.0003080 0.0006200 -0.0008870 + 525.8469000 0.0095540 -0.0034280 0.0007600 0.0011870 0.0025920 -0.0032040 + 240.9762000 0.0303350 -0.0110390 0.0024250 0.0037600 0.0075710 -0.0108490 + 116.6418000 0.0809840 -0.0301570 0.0067060 0.0104780 0.0230010 -0.0283310 + 58.8483400 0.1746920 -0.0675490 0.0148900 0.0230580 0.0459430 -0.0673690 + 30.5291000 0.2885440 -0.1164660 0.0261810 0.0410950 0.0929370 -0.1083230 + 16.1694300 0.3311360 -0.1414410 0.0313100 0.0485290 0.0934070 -0.1719860 + 8.6642360 0.2128970 -0.0487170 0.0108480 0.0188210 0.0801520 -0.1084480 + 4.5919430 0.0562950 0.1946550 -0.0538620 -0.0889830 -0.3177930 0.7416070 + 2.3810480 0.0018950 0.4041480 -0.1061120 -0.1710610 -0.4378130 0.8082640 + 1.2062460 -0.0019550 0.3789040 -0.1217750 -0.1897640 -0.2329460 -1.7802720 + 0.5888220 -0.0011260 0.1673060 0.0038630 0.0718740 1.1648970 0.0636530 + 0.2246580 -0.0000740 0.0177190 0.3271980 0.6049170 0.1731560 1.4742420 + 0.0904360 -0.0000030 -0.0012520 0.5419610 0.4357830 -0.8160710 -1.0385490 +Co P + 0.0358480 1.0000000 +Co P + 0.0142100 1.0000000 +Co D + 375.3200000 0.0003560 -0.0004110 -0.0005450 -0.0008270 + 112.6040000 0.0032390 -0.0037740 -0.0050280 -0.0070410 + 43.5190000 0.0165690 -0.0193160 -0.0259450 -0.0392680 + 18.8147000 0.0559830 -0.0664370 -0.0911040 -0.1333410 + 8.6649100 0.1394030 -0.1705420 -0.2453950 -0.4342300 + 4.1371100 0.2443780 -0.2854770 -0.3481600 -0.2565540 + 1.9708000 0.3081070 -0.2328840 0.0700830 0.9662400 + 0.9150070 0.2972660 0.0944710 0.6494450 0.1097980 + 0.4073700 0.2136850 0.4201780 0.1939420 -1.0470350 + 0.1704440 0.0934140 0.4094740 -0.6184680 0.4375990 +Co D + 0.0643790 1.0000000 +Co D + 0.0243200 1.0000000 +Co F + 5.9832000 1.0000000 +Co F + 1.8045000 1.0000000 +Co F + 0.5442000 1.0000000 +Co F + 0.1841600 1.0000000 +Co G + 4.4514000 1.0000000 +Co G + 1.2700000 1.0000000 +Co G + 0.4963100 1.0000000 +Co H + 2.7959000 1.0000000 +Co H + 1.1579100 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Ni S + 15503020.0000000 2.085023E-06 -7.298155E-07 2.453237E-07 -5.114261E-08 -9.762069E-08 -1.771733E-07 -1.988311E-07 + 2321071.0000000 1.621425E-05 -5.677768E-06 1.909637E-06 -3.980779E-07 -7.741142E-07 -1.397615E-06 -1.449716E-06 + 528180.2000000 8.530773E-05 -2.985922E-05 1.003489E-05 -2.092033E-06 -3.959746E-06 -7.203859E-06 -8.363444E-06 + 149604.0000000 0.0003603793 -0.0001262784 4.248835E-05 -8.856836E-06 -1.736914E-05 -3.128552E-05 -3.125532E-05 + 48809.0700000 0.001312632 -0.0004600252 0.0001546187 -3.223602E-05 -6.044953E-05 -0.0001102699 -0.0001327624 + 17622.3900000 0.004272395 -0.00150323 0.000506455 -0.0001055757 -0.0002090555 -0.0003755735 -0.0003589662 + 6874.2010000 0.01265994 -0.004479171 0.00150884 -0.0003146356 -0.0005834312 -0.0010679 -0.001341488 + 2851.8570000 0.03423065 -0.01232512 0.004178816 -0.0008714113 -0.001746713 -0.003128427 -0.002824018 + 1244.3340000 0.08326735 -0.03097639 0.01056668 -0.002205415 -0.004026784 -0.007410272 -0.009863607 + 566.1547000 0.1745758 -0.06998651 0.0243930 -0.005095517 -0.01042362 -0.01859501 -0.01523481 + 266.7873000 0.2898023 -0.1339256 0.04812101 -0.01008237 -0.01781172 -0.03322798 -0.04984489 + 129.3752000 0.3207323 -0.1966881 0.0756517 -0.0159207 -0.03466996 -0.0611844 -0.03522354 + 63.6516100 0.1778265 -0.1402258 0.05748534 -0.01222037 -0.01540945 -0.03286334 -0.1056424 + 29.3330200 0.03633007 0.1960730 -0.09783186 0.02115869 0.02086455 0.04844202 0.2138034 + 14.8221200 0.02089458 0.5564517 -0.3864536 0.08747304 0.2206820 0.3989880 0.1517675 + 7.4605130 0.01596954 0.3702167 -0.3606598 0.08511605 0.1073966 0.3379290 1.1804280 + 3.4135760 0.001730245 0.05396034 0.2888650 -0.08115683 -0.08310668 -0.7016224 -3.5264900 + 1.6328840 0.0004817365 0.004706492 0.6830917 -0.2166359 -0.8942999 -1.6944340 2.5508150 + 0.7435790 0.00012468 0.003736115 0.3206778 -0.2076958 0.3750141 2.5826800 0.4306461 + 0.1725920 2.340378E-05 -7.46805E-05 0.01651471 0.2699296 1.4967530 -0.5498758 -3.4500410 + 0.0774200 -1.348962E-05 9.575336E-05 0.0003124693 0.5842711 -0.5320390 -1.3945510 4.7403420 +Ni S + 0.0337010 1.0000000 +Ni S + 0.0146700 1.0000000 +Ni P + 45066.6200000 0.0000110 -0.0000040 0.0000010 0.0000020 0.0000030 0.0000040 + 10662.6400000 0.0000960 -0.0000350 0.0000070 0.0000140 0.0000240 0.0000360 + 3463.4310000 0.0005640 -0.0002020 0.0000410 0.0000840 0.0001550 0.0001990 + 1326.6240000 0.0025700 -0.0009250 0.0001860 0.0003710 0.0006460 0.0009590 + 564.7414000 0.0096770 -0.0034990 0.0007120 0.0014600 0.0026890 0.0034630 + 258.8288000 0.0307420 -0.0112800 0.0022690 0.0045370 0.0078990 0.0117560 + 125.3115000 0.0820650 -0.0308190 0.0062910 0.0129220 0.0239120 0.0306900 + 63.2423300 0.1768450 -0.0690360 0.0139340 0.0277660 0.0480060 0.0730810 + 32.8240600 0.2911620 -0.1187330 0.0245310 0.0509560 0.0962130 0.1168270 + 17.3969200 0.3308160 -0.1424430 0.0287700 0.0567450 0.0975820 0.1911630 + 9.3243940 0.2088190 -0.0431070 0.0087810 0.0241190 0.0770220 0.1065430 + 4.9388390 0.0537390 0.2034990 -0.0517310 -0.1250870 -0.3601360 -0.9499240 + 2.5620250 0.0017090 0.4062280 -0.0959450 -0.2065410 -0.4455890 -0.5636050 + 1.2992940 -0.0017980 0.3709380 -0.1106750 -0.2149830 -0.1165380 1.9346110 + 0.6346780 -0.0010460 0.1643120 0.0027270 0.2078190 1.1705030 -0.5101770 + 0.2322620 -0.0000620 0.0172650 0.3150270 0.6385420 -0.0389310 -1.1722970 + 0.0915460 0.0000000 -0.0016820 0.5428100 0.3262840 -0.7688140 1.0158980 +Ni P + 0.0356430 1.0000000 +Ni P + 0.0138800 1.0000000 +Ni D + 414.3427000 0.0003500 -0.0003620 -0.0005290 -0.0007870 + 124.3926000 0.0032000 -0.0033350 -0.0049280 -0.0067780 + 48.1154000 0.0164770 -0.0171760 -0.0253720 -0.0377260 + 20.8420000 0.0560010 -0.0592450 -0.0896540 -0.1291250 + 9.6221000 0.1392340 -0.1512320 -0.2387440 -0.4148090 + 4.6034000 0.2427760 -0.2544610 -0.3597210 -0.2839570 + 2.1963000 0.3040690 -0.2287180 0.0044440 0.8671940 + 1.0206000 0.2933190 0.0206160 0.5965470 0.2723270 + 0.4544000 0.2172590 0.3427530 0.3313020 -0.9868420 + 0.1900000 0.1046990 0.4738710 -0.5090090 0.1853600 +Ni D + 0.0715000 1.0000000 +Ni D + 0.0269100 1.0000000 +Ni F + 6.9134000 1.0000000 +Ni F + 2.1260000 1.0000000 +Ni F + 0.6538000 1.0000000 +Ni F + 0.2265000 1.0000000 +Ni G + 5.3123000 1.0000000 +Ni G + 1.5457000 1.0000000 +Ni G + 0.6237000 1.0000000 +Ni H + 3.3495000 1.0000000 +Ni H + 1.4486000 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Cu S + 16665490.0000000 1.92221E-06 -1.082642E-06 2.389605E-07 -4.823436E-08 -8.876635E-08 -1.849356E-07 -1.980951E-07 + 2495213.0000000 1.494655E-05 -8.420869E-06 1.860009E-06 -3.753858E-07 -7.032135E-07 -1.461905E-06 -1.446191E-06 + 567850.7000000 7.863106E-05 -4.428625E-05 9.77258E-06 -1.972743E-06 -3.601366E-06 -7.510534E-06 -8.326308E-06 + 160853.1000000 0.0003321189 -0.0001872071 4.137619E-05 -8.349961E-06 -1.576871E-05 -3.274989E-05 -3.11938E-05 + 52481.8600000 0.001209649 -0.0006819265 0.0001505588 -3.039535E-05 -5.499726E-05 -0.0001148239 -0.0001320842 + 18948.8500000 0.003936231 -0.002225485 0.0004932175 -9.95301E-05 -0.0001897055 -0.0003935903 -0.0003585362 + 7391.6550000 0.01166031 -0.00661962 0.001469467 -0.0002967188 -0.0005311656 -0.001110617 -0.001333996 + 3066.5170000 0.03149512 -0.0181140 0.004071487 -0.0008217293 -0.001584593 -0.003284174 -0.002824728 + 1337.9940000 0.07646385 -0.04506622 0.01030091 -0.002081377 -0.003671316 -0.007697235 -0.009806333 + 608.7830000 0.1595162 -0.09955443 0.02381408 -0.004811149 -0.009458893 -0.01959013 -0.01529323 + 286.8980000 0.2618983 -0.1830558 0.04707008 -0.009537683 -0.01630134 -0.03444712 -0.04956573 + 139.1530000 0.2816708 -0.2510577 0.0742445 -0.01507351 -0.03145402 -0.06507176 -0.03583468 + 68.4945500 0.1509587 -0.1703417 0.05657657 -0.01161088 -0.01444712 -0.03269416 -0.1044906 + 31.6010800 0.07041955 0.1900077 -0.09760862 0.02032716 0.02037856 0.04738915 0.2105854 + 15.9915800 0.1180039 0.5507048 -0.3856399 0.08327403 0.1997307 0.4333712 0.1646732 + 8.0565100 0.08015187 0.3642532 -0.3540312 0.07953125 0.09475926 0.3189521 1.1505130 + 3.6903290 0.01020122 0.04868977 0.2983959 -0.07901524 -0.07935398 -0.7281955 -3.4837320 + 1.7629020 -0.0003720464 -0.003799993 0.6861809 -0.2054312 -0.7591353 -1.6631160 2.5166360 + 0.8012690 -2.206886E-05 -0.0003156308 0.3150989 -0.1985134 0.2365079 2.5132670 0.4429064 + 0.1842430 -2.401085E-05 -0.0002430411 0.01394564 0.2627133 1.4226040 -0.3736861 -3.4043100 + 0.0817930 1.529816E-05 0.0001553645 -0.00361164 0.5794031 -0.3066203 -1.4791020 4.6278500 +Cu S + 0.0353030 1.0000000 +Cu S + 0.0152400 1.0000000 +Cu P + 48218.4100000 0.0000110 -0.0000040 0.0000010 0.0000020 0.0000030 0.0000040 + 11420.5500000 0.0000970 -0.0000350 0.0000070 0.0000130 0.0000250 0.0000370 + 3713.5690000 0.0005690 -0.0002060 0.0000400 0.0000790 0.0001630 0.0001900 + 1423.7620000 0.0025890 -0.0009410 0.0001820 0.0003490 0.0006760 0.0009780 + 606.6041000 0.0097420 -0.0035560 0.0006970 0.0013730 0.0028080 0.0033080 + 278.2564000 0.0309300 -0.0114610 0.0022200 0.0042610 0.0082550 0.0119800 + 134.8449000 0.0825300 -0.0313090 0.0061630 0.0121460 0.0249460 0.0292070 + 68.1225400 0.1777580 -0.0701390 0.0136310 0.0260640 0.0501600 0.0751220 + 35.4008800 0.2922250 -0.1205620 0.0240330 0.0479070 0.1002890 0.1078350 + 18.7902900 0.3303490 -0.1435520 0.0278620 0.0528290 0.1023190 0.2073790 + 10.0835600 0.2068630 -0.0403270 0.0079750 0.0215750 0.0772410 0.0604060 + 5.3461200 0.0527930 0.2084660 -0.0511330 -0.1177830 -0.3844490 -0.8949770 + 2.7752280 0.0017180 0.4087240 -0.0923050 -0.1883970 -0.4513540 -0.5584020 + 1.4075640 -0.0017010 0.3682010 -0.1064580 -0.2019160 -0.0947780 1.8997060 + 0.6872130 -0.0009760 0.1596530 0.0037380 0.1737430 1.1731180 -0.5022240 + 0.2468220 -0.0000540 0.0159550 0.3105410 0.6368480 -0.0541330 -1.1824130 + 0.0962200 0.0000000 -0.0016810 0.5419030 0.3515180 -0.7282440 1.0445070 +Cu P + 0.0370370 1.0000000 +Cu P + 0.0142600 1.0000000 +Cu D + 527.8860000 0.0002560 -0.0003160 0.0003790 -0.0005930 + 158.7330000 0.0023780 -0.0029580 0.0035730 -0.0051060 + 61.5556000 0.0127220 -0.0158770 0.0192290 -0.0299220 + 26.8834000 0.0450120 -0.0568640 0.0699030 -0.1032930 + 12.5175000 0.1171960 -0.1535840 0.1993800 -0.3595680 + 6.0697700 0.2185550 -0.2811390 0.3488480 -0.4128070 + 2.9583190 0.2914480 -0.2685180 0.0513940 0.7476890 + 1.4141220 0.2971380 0.0231300 -0.5596790 0.5425150 + 0.6533290 0.2360920 0.3566200 -0.3845810 -0.9777060 + 0.2866920 0.1314440 0.4184700 0.4389250 -0.0886030 +Cu D + 0.1150140 1.0000000 +Cu D + 0.0461400 1.0000000 +Cu F + 7.7344000 1.0000000 +Cu F + 2.3909000 1.0000000 +Cu F + 0.7391000 1.0000000 +Cu F + 0.2574700 1.0000000 +Cu G + 6.0075000 1.0000000 +Cu G + 1.7760000 1.0000000 +Cu G + 0.7321200 1.0000000 +Cu H + 3.7909000 1.0000000 +Cu H + 1.6768100 1.0000000 +#BASIS SET: (23s,19p,12d,4f,3g,2h) -> [9s,8p,6d,4f,3g,2h] +Zn S + 0.1785293E+08 2.106603E-06 -6.503871E-07 2.455424E-07 4.916948E-08 -1.379282E-07 -1.951222E-07 -2.631275E-07 + 2673038.0000000 1.638051E-05 -5.059606E-06 1.911263E-06 3.829348E-07 -1.098688E-06 -1.513488E-06 -1.954514E-06 + 608324.4000000 8.617178E-05 -2.660362E-05 1.004137E-05 2.010287E-06 -5.581627E-06 -7.991991E-06 -1.098059E-05 + 172317.6000000 0.0003640028 -0.0001125168 4.25171E-05 8.520784E-06 -2.469757E-05 -3.361493E-05 -4.252529E-05 + 56222.6900000 0.001325778 -0.0004098844 0.0001546957 3.096268E-05 -8.4997E-05 -0.0001233416 -0.0001728905 + 20299.8500000 0.004315394 -0.001340085 0.0005068054 0.000101604 -0.000297955 -0.0004000292 -0.0004940605 + 7918.8710000 0.01278917 -0.003996271 0.001509742 0.0003021322 -0.0008180999 -0.001206705 -0.001731281 + 3285.3400000 0.03459541 -0.01102397 0.004183744 0.0008393851 -0.002498043 -0.003298144 -0.003952778 + 1433.5240000 0.08423468 -0.02783658 0.01058425 0.00211904 -0.005630866 -0.008503531 -0.01260194 + 652.2889000 0.1769497 -0.0635220 0.02447935 0.004923291 -0.01501607 -0.01932075 -0.02205362 + 307.4360000 0.2947718 -0.1235647 0.04837945 0.009713665 -0.02479935 -0.0395118 -0.06268701 + 149.1466000 0.3286054 -0.1860330 0.07630985 0.01549413 -0.05092472 -0.06074193 -0.05878225 + 73.4510800 0.1837326 -0.1345412 0.05798021 0.0117057 -0.01923797 -0.05154698 -0.1200370 + 33.9256200 0.0284564 0.2026370 -0.1010517 -0.02068558 0.0248084 0.0906352 0.2236128 + 17.1894700 -0.001562471 0.5627948 -0.3950702 -0.08652477 0.3402582 0.3930253 0.4980742 + 8.6665950 0.001057694 0.3687315 -0.3534286 -0.07840824 0.1317501 0.5283548 1.1915800 + 3.9725050 -0.0004832147 0.05055865 0.3070109 0.07950591 -0.2092734 -1.4626110 -5.6490630 + 1.8946650 0.0001795943 -0.00028561 0.6935144 0.2182560 -1.2899700 -0.8366769 6.8434890 + 0.8593850 -7.198366E-05 0.001213965 0.3040583 0.1957366 0.9898685 2.6151680 -3.3201000 + 0.1952560 2.200105E-05 -0.0001706895 0.01003318 -0.3195337 1.4779600 -2.2413220 -0.2249601 + 0.0858540 -1.56551E-05 0.0001266229 -0.004007622 -0.5833695 -1.2347640 0.7597394 1.9021540 +Zn S + 0.0367810 1.0000000 +Zn S + 0.0157600 1.0000000 +Zn P + 52867.9300000 0.0000110 -0.0000040 0.0000010 0.0000010 0.0000030 -0.0000030 + 12511.7900000 0.0000940 -0.0000350 0.0000060 0.0000110 0.0000240 -0.0000360 + 4065.2860000 0.0005510 -0.0002060 0.0000380 0.0000670 0.0001590 -0.0001740 + 1557.5950000 0.0025110 -0.0009420 0.0001730 0.0002960 0.0006460 -0.0009530 + 663.2892000 0.0094700 -0.0035700 0.0006640 0.0011570 0.0027470 -0.0030470 + 304.1561000 0.0301690 -0.0115400 0.0021200 0.0036340 0.0079380 -0.0117360 + 147.3680000 0.0808550 -0.0316520 0.0059160 0.0103070 0.0246010 -0.0270160 + 74.4546900 0.1751390 -0.0712850 0.0131530 0.0224820 0.0485760 -0.0747980 + 38.7149300 0.2897160 -0.1232840 0.0233720 0.0410330 0.1006820 -0.0982370 + 20.5702200 0.3298490 -0.1476380 0.0272210 0.0464600 0.0984680 -0.2150840 + 11.0542500 0.2092940 -0.0444770 0.0083340 0.0181460 0.0862350 -0.0322140 + 5.8746610 0.0562590 0.2053650 -0.0488600 -0.0943640 -0.3793800 0.7563080 + 3.0529360 0.0050520 0.4100860 -0.0888940 -0.1601770 -0.4203930 0.7019320 + 1.5472250 0.0009970 0.3721450 -0.1036180 -0.1808950 -0.1825620 -1.8141870 + 0.7541510 0.0001870 0.1581180 0.0010510 0.0948260 1.1778870 0.2914540 + 0.2653490 0.0000510 0.0145400 0.3030640 0.6291530 0.0519740 1.2956230 + 0.1020670 -0.0000130 -0.0016080 0.5427240 0.4083180 -0.7444770 -1.0670890 +Zn P + 0.0387550 1.0000000 +Zn P + 0.0147200 1.0000000 +Zn D + 639.7806000 0.0002080 -0.0002900 -0.0003170 0.0004520 + 192.6742000 0.0019540 -0.0027380 -0.0030560 0.0038790 + 74.8436800 0.0107110 -0.0151110 -0.0167530 0.0235700 + 32.8604800 0.0390570 -0.0556430 -0.0627120 0.0825260 + 15.3935300 0.1048480 -0.1558640 -0.1879800 0.2972800 + 7.5255120 0.2045690 -0.3034890 -0.3720840 0.4368320 + 3.7154290 0.2852080 -0.3062760 -0.0234390 -0.6042900 + 1.8064590 0.3014460 0.0333950 0.6054700 -0.6746050 + 0.8529730 0.2462280 0.4000750 0.3230630 0.9387020 + 0.3847800 0.1390160 0.3899720 -0.4713720 0.2779680 +Zn D + 0.1593370 1.0000000 +Zn D + 0.0659800 1.0000000 +Zn F + 8.6960000 1.0000000 +Zn F + 2.7236000 1.0000000 +Zn F + 0.8530000 1.0000000 +Zn F + 0.2994900 1.0000000 +Zn G + 6.8933000 1.0000000 +Zn G + 2.0693000 1.0000000 +Zn G + 0.8673600 1.0000000 +Zn H + 4.4136000 1.0000000 +Zn H + 2.0273400 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +Ga S + 11274496.0000000 0.0000041 -0.0000013 0.0000005 -0.0000001 + 1688053.4000000 0.0000316 -0.0000098 0.0000037 -0.0000009 + 384140.8300000 0.0001662 -0.0000515 0.0000197 -0.0000046 + 108807.0300000 0.0007017 -0.0002176 0.0000830 -0.0000193 + 35497.6910000 0.0025508 -0.0007932 0.0003029 -0.0000705 + 12815.1040000 0.0082653 -0.0025821 0.0009850 -0.0002290 + 4998.1087000 0.0241950 -0.0076652 0.0029341 -0.0006835 + 2072.8848000 0.0636572 -0.0207567 0.0079572 -0.0018505 + 903.7458200 0.1457651 -0.0507758 0.0196761 -0.0045930 + 410.4430700 0.2703313 -0.1073802 0.0421783 -0.0098343 + 192.6063600 0.3491571 -0.1806520 0.0738645 -0.0173849 + 92.0496780 0.2374433 -0.1736701 0.0747531 -0.0175752 + 42.0478110 0.0480833 0.1108251 -0.0534108 0.0125254 + 21.0692170 -0.0022966 0.5418366 -0.3573919 0.0903400 + 10.4479150 0.0017904 0.4467899 -0.4250713 0.1104721 + 4.7776580 -0.0008276 0.0762105 0.2010992 -0.0612119 + 2.2825660 0.0003543 -0.0009371 0.7145966 -0.2561768 + 1.0353030 -0.0001411 0.0017806 0.3688149 -0.2603772 +Ga S + 0.2576740 1.0000000 +Ga S + 0.1191790 1.0000000 +Ga S + 0.0512940 1.0000000 +Ga S + 0.0184750 1.0000000 +Ga P + 22059.7710000 0.0000547 -0.0000207 0.0000034 + 5222.3129000 0.0004865 -0.0001846 0.0000300 + 1696.0601000 0.0027990 -0.0010640 0.0001750 + 648.7657300 0.0122396 -0.0046946 0.0007642 + 275.1026700 0.0427476 -0.0166486 0.0027458 + 125.3463400 0.1187187 -0.0478114 0.0078140 + 60.0543340 0.2485828 -0.1045303 0.0174215 + 29.7237680 0.3601622 -0.1612965 0.0264852 + 15.0397810 0.2950171 -0.1143170 0.0193950 + 7.5722730 0.0984794 0.1459056 -0.0313129 + 3.7386760 0.0087671 0.4271989 -0.0801634 + 1.7967880 0.0013961 0.4240415 -0.1001729 + 0.8299100 0.0000770 0.1599440 -0.0105878 +Ga P + 0.2728740 1.0000000 +Ga P + 0.1015400 1.0000000 +Ga P + 0.0376580 1.0000000 +Ga P + 0.0114060 1.0000000 +Ga D + 766.4369600 0.0001745 + 231.0042500 0.0016577 + 89.7812380 0.0092899 + 39.5466810 0.0348905 + 18.6075830 0.0963453 + 9.1512870 0.1955703 + 4.5650050 0.2835942 + 2.2530660 0.3082515 + 1.0867230 0.2519620 +Ga D + 0.5033040 1.0000000 +Ga D + 0.2122830 1.0000000 +Ga D + 0.0828000 1.0000000 +Ga D + 0.0279000 1.0000000 +Ga F + 0.1810000 1.0000000 +Ga F + 0.4710000 1.0000000 +Ga F + 0.0655000 1.0000000 +Ga G + 0.4032000 1.0000000 +Ga G + 0.1680000 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +Ge S + 12360507.0000000 0.0000039 -0.0000012 0.0000005 -0.0000001 + 1850697.8000000 0.0000305 -0.0000095 0.0000037 -0.0000009 + 421131.4200000 0.0001605 -0.0000499 0.0000192 -0.0000049 + 119278.2600000 0.0006776 -0.0002109 0.0000813 -0.0000208 + 38912.2770000 0.0024637 -0.0007686 0.0002965 -0.0000761 + 14048.6820000 0.0079835 -0.0025025 0.0009648 -0.0002472 + 5480.6992000 0.0233774 -0.0074259 0.0028715 -0.0007373 + 2274.2055000 0.0615742 -0.0201249 0.0077973 -0.0019981 + 992.2412900 0.1415076 -0.0492986 0.0192922 -0.0049640 + 450.9996600 0.2646942 -0.1048683 0.0416200 -0.0106930 + 211.8202400 0.3483257 -0.1783275 0.0735368 -0.0190843 + 101.4110200 0.2454196 -0.1789581 0.0778320 -0.0201643 + 46.9140900 0.0535646 0.0873842 -0.0423582 0.0108362 + 23.5089500 -0.0018380 0.5270920 -0.3447537 0.0962110 + 11.6813110 0.0018049 0.4679551 -0.4456713 0.1279979 + 5.4345260 -0.0008476 0.0892206 0.1511544 -0.0506065 + 2.6088080 0.0003668 -0.0003423 0.7174295 -0.2852917 + 1.1984420 -0.0001542 0.0019144 0.4035634 -0.3065359 +Ge S + 0.3298080 1.0000000 +Ge S + 0.1554330 1.0000000 +Ge S + 0.0669130 1.0000000 +Ge S + 0.0263900 1.0000000 +Ge P + 24017.4660000 0.0000531 -0.0000204 0.0000040 + 5685.7175000 0.0004720 -0.0001818 0.0000357 + 1846.4859000 0.0027187 -0.0010491 0.0002080 + 706.2498100 0.0119145 -0.0046392 0.0009121 + 299.4561000 0.0417625 -0.0165090 0.0032823 + 136.4390400 0.1165894 -0.0476609 0.0094139 + 65.3901550 0.2458338 -0.1049678 0.0210917 + 32.3937350 0.3591261 -0.1633745 0.0325000 + 16.4156160 0.2977929 -0.1180998 0.0239972 + 8.2877870 0.1017708 0.1420178 -0.0371186 + 4.1126340 0.0094072 0.4274324 -0.0988130 + 1.9988540 0.0014350 0.4256167 -0.1235659 + 0.9442910 0.0000354 0.1582034 -0.0110133 +Ge P + 0.3412110 1.0000000 +Ge P + 0.1343500 1.0000000 +Ge P + 0.0517350 1.0000000 +Ge P + 0.0185500 1.0000000 +Ge D + 864.6741100 0.0001645 + 261.0376300 0.0015654 + 101.7703000 0.0087954 + 45.1166410 0.0331852 + 21.4306860 0.0919537 + 10.6598610 0.1892017 + 5.3922870 0.2805892 + 2.7044970 0.3117474 + 1.3285440 0.2554197 +Ge D + 0.6264520 1.0000000 +Ge D + 0.2660130 1.0000000 +Ge D + 0.1063000 1.0000000 +Ge D + 0.0397000 1.0000000 +Ge F + 0.5492000 1.0000000 +Ge F + 0.2190000 1.0000000 +Ge F + 0.0884000 1.0000000 +Ge G + 0.4681000 1.0000000 +Ge G + 0.2143000 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +As S + 13600341.0000000 0.0000038 -0.0000012 0.0000005 -0.0000001 + 2036507.3000000 0.0000292 -0.0000091 0.0000036 -0.0000010 + 463432.7800000 0.0001538 -0.0000480 0.0000187 -0.0000052 + 131259.9400000 0.0006496 -0.0002028 0.0000790 -0.0000217 + 42819.1920000 0.0023625 -0.0007392 0.0002881 -0.0000794 + 15457.0190000 0.0076609 -0.0024089 0.0009386 -0.0002583 + 6028.4583000 0.0224672 -0.0071538 0.0027946 -0.0007709 + 2500.5599000 0.0593425 -0.0194333 0.0076098 -0.0020946 + 1090.6149000 0.1371015 -0.0477471 0.0188699 -0.0052164 + 495.6215400 0.2589472 -0.1022639 0.0410063 -0.0113163 + 232.8166900 0.3472847 -0.1758326 0.0731275 -0.0203935 + 111.6311800 0.2534247 -0.1837494 0.0807194 -0.0224664 + 52.2699500 0.0596266 0.0648276 -0.0316300 0.0085590 + 26.1498780 -0.0011861 0.5109281 -0.3317376 0.0995692 + 13.0187570 0.0017791 0.4873143 -0.4638221 0.1434501 + 6.1554320 -0.0008455 0.1033636 0.1036990 -0.0371901 + 2.9591270 0.0003660 0.0006355 0.7182986 -0.3085368 + 1.3738740 -0.0001622 0.0019766 0.4353305 -0.3478649 +As S + 0.4088500 1.0000000 +As S + 0.1945110 1.0000000 +As S + 0.0836410 1.0000000 +As S + 0.0324990 1.0000000 +As P + 25570.4180000 0.0000533 -0.0000208 0.0000046 + 6052.9237000 0.0004744 -0.0001855 0.0000412 + 1965.7002000 0.0027330 -0.0010704 0.0002393 + 751.7722900 0.0119871 -0.0047392 0.0010531 + 318.6814000 0.0420766 -0.0168885 0.0037863 + 145.1474900 0.1175891 -0.0488445 0.0109101 + 69.5411620 0.2478747 -0.1075989 0.0243853 + 34.4513760 0.3605148 -0.1669376 0.0376482 + 17.4606100 0.2955921 -0.1169214 0.0265137 + 8.8086090 0.0992163 0.1514505 -0.0445464 + 4.3786460 0.0087866 0.4371731 -0.1167681 + 2.1444050 0.0014462 0.4197078 -0.1409441 + 1.0293500 -0.0000447 0.1437636 -0.0012121 +As P + 0.4046360 1.0000000 +As P + 0.1656220 1.0000000 +As P + 0.0656100 1.0000000 +As P + 0.0236980 1.0000000 +As D + 996.9796000 0.0001462 + 300.9851800 0.0014034 + 117.2347300 0.0080195 + 51.9569040 0.0310048 + 24.6894400 0.0878478 + 12.2951710 0.1852250 + 6.2446520 0.2808251 + 3.1554600 0.3163198 + 1.5680490 0.2571192 +As D + 0.7486470 1.0000000 +As D + 0.3191250 1.0000000 +As D + 0.1300000 1.0000000 +As D + 0.0531000 1.0000000 +As F + 0.2640000 1.0000000 +As F + 0.6440000 1.0000000 +As F + 0.1132000 1.0000000 +As G + 0.5465000 1.0000000 +As G + 0.2390000 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +Se S + 15011000.0000000 0.0000036 -0.0000011 0.0000004 -0.0000001 + 2247500.0000000 0.0000279 -0.0000087 0.0000034 -0.0000010 + 511450.0000000 0.0001466 -0.0000459 0.0000181 -0.0000053 + 144870.0000000 0.0006190 -0.0001939 0.0000763 -0.0000223 + 47261.0000000 0.0022514 -0.0007064 0.0002781 -0.0000814 + 17062.0000000 0.0073030 -0.0023030 0.0009068 -0.0002649 + 6654.5000000 0.0214442 -0.0068425 0.0026999 -0.0007906 + 2759.8000000 0.0568122 -0.0186335 0.0073726 -0.0021539 + 1203.2000000 0.1320807 -0.0459512 0.0183360 -0.0053812 + 546.5300000 0.2523469 -0.0992193 0.0401812 -0.0117694 + 256.6300000 0.3459296 -0.1728813 0.0724864 -0.0214629 + 123.1400000 0.2623890 -0.1884973 0.0835626 -0.0246904 + 58.2630000 0.0667938 0.0422610 -0.0207592 0.0057774 + 29.0230000 -0.0003332 0.4936791 -0.3183535 0.1015209 + 14.4650000 0.0017275 0.5052818 -0.4798333 0.1578570 + 6.9348000 -0.0008299 0.1184150 0.0592819 -0.0224219 + 3.3299000 0.0003578 0.0019567 0.7174116 -0.3290776 + 1.5600000 -0.0001666 0.0019648 0.4638636 -0.3873443 +Se S + 0.4929100 1.0000000 +Se S + 0.2352500 1.0000000 +Se S + 0.1003700 1.0000000 +Se S + 0.0381520 1.0000000 +Se P + 25217.0000000 0.0000610 -0.0000241 0.0000058 + 5969.9000000 0.0005424 -0.0002152 0.0000520 + 1938.9000000 0.0031174 -0.0012386 0.0002998 + 741.6600000 0.0135977 -0.0054607 0.0013201 + 314.5000000 0.0472788 -0.0192936 0.0046857 + 143.3100000 0.1297856 -0.0549715 0.0133737 + 68.6500000 0.2657383 -0.1177952 0.0289245 + 33.9950000 0.3673544 -0.1740782 0.0429454 + 17.1850000 0.2747805 -0.0955798 0.0223272 + 8.5740000 0.0791679 0.2059714 -0.0636031 + 4.2206000 0.0051349 0.4735431 -0.1436147 + 2.0521000 0.0013319 0.3831922 -0.1447293 + 0.9615600 -0.0002033 0.0920872 0.0630380 +Se P + 0.4215100 1.0000000 +Se P + 0.1762600 1.0000000 +Se P + 0.0706630 1.0000000 +Se P + 0.0265690 1.0000000 +Se D + 1143.4000000 0.0001301 + 345.3300000 0.0012573 + 134.4600000 0.0072882 + 59.5670000 0.0288647 + 28.2830000 0.0838987 + 14.0610000 0.1819771 + 7.1390000 0.2826057 + 3.6148000 0.3220453 + 1.8072000 0.2581633 +Se D + 0.8694400 1.0000000 +Se D + 0.3703600 1.0000000 +Se D + 0.1530000 1.0000000 +Se D + 0.0619000 1.0000000 +Se F + 0.2840000 1.0000000 +Se F + 0.7097000 1.0000000 +Se F + 0.1240000 1.0000000 +Se G + 0.5730000 1.0000000 +Se G + 0.2630000 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +Br S + 16475000.0000000 0.0000034 -0.0000011 0.0000004 -0.0000001 + 2466600.0000000 0.0000267 -0.0000084 0.0000033 -0.0000010 + 561310.0000000 0.0001404 -0.0000441 0.0000175 -0.0000054 + 158990.0000000 0.0005927 -0.0001862 0.0000740 -0.0000227 + 51869.0000000 0.0021561 -0.0006783 0.0002697 -0.0000827 + 18726.0000000 0.0069959 -0.0022122 0.0008799 -0.0002694 + 7303.6000000 0.0205645 -0.0065752 0.0026198 -0.0008042 + 3029.1000000 0.0545893 -0.0179328 0.0071671 -0.0021949 + 1320.8000000 0.1275226 -0.0443321 0.0178561 -0.0054939 + 600.0300000 0.2459780 -0.0963478 0.0393960 -0.0120960 + 281.9000000 0.3436508 -0.1696814 0.0717102 -0.0222623 + 135.5400000 0.2702530 -0.1920769 0.0858877 -0.0266063 + 64.8700000 0.0744795 0.0208731 -0.0103861 0.0027580 + 32.1290000 0.0008787 0.4744996 -0.3040135 0.1016803 + 16.0370000 0.0015755 0.5214907 -0.4933178 0.1704132 + 7.7849000 -0.0007602 0.1348001 0.0160890 -0.0062220 + 3.7247000 0.0003211 0.0036614 0.7146686 -0.3452570 + 1.7583000 -0.0001586 0.0018840 0.4904795 -0.4234840 +Br S + 0.5833100 1.0000000 +Br S + 0.2785600 1.0000000 +Br S + 0.1182900 1.0000000 +Br S + 0.0442700 1.0000000 +Br P + 26607.0000000 0.0000619 -0.0000248 0.0000064 + 6298.2000000 0.0005499 -0.0002212 0.0000572 + 2045.2000000 0.0031620 -0.0012736 0.0003297 + 782.1600000 0.0137979 -0.0056179 0.0014562 + 331.6300000 0.0479812 -0.0198600 0.0051591 + 151.1100000 0.1315710 -0.0565531 0.0147617 + 72.3920000 0.2685861 -0.1209479 0.0317694 + 35.8620000 0.3683473 -0.1773098 0.0470680 + 18.1340000 0.2711363 -0.0921472 0.0223871 + 9.0430000 0.0762222 0.2187683 -0.0720254 + 4.4500000 0.0046749 0.4854670 -0.1626429 + 2.1661000 0.0012565 0.3721970 -0.1496503 + 0.9962800 -0.0002357 0.0776907 0.1064517 +Br P + 0.4544300 1.0000000 +Br P + 0.1940400 1.0000000 +Br P + 0.0789970 1.0000000 +Br P + 0.0305130 1.0000000 +Br D + 1289.6000000 0.0001190 + 389.7500000 0.0011551 + 151.7600000 0.0067648 + 67.2230000 0.0273017 + 31.9130000 0.0809298 + 15.8570000 0.1794011 + 8.0545000 0.2840086 + 4.0887000 0.3266797 + 2.0556000 0.2584900 +Br D + 0.9950900 1.0000000 +Br D + 0.4231300 1.0000000 +Br D + 0.1779000 1.0000000 +Br D + 0.0829000 1.0000000 +Br F + 0.3407000 1.0000000 +Br F + 0.8257000 1.0000000 +Br F + 0.1748000 1.0000000 +Br G + 0.6491000 1.0000000 +Br G + 0.3110000 1.0000000 +#BASIS SET: (22s,17p,13d,3f,2g) -> [8s,7p,5d,3f,2g] +Kr S + 18226108.0000000 0.0000032 -0.0000010 0.0000004 -0.0000001 + 2728802.5000000 0.0000252 -0.0000079 0.0000032 -0.0000010 + 620997.7100000 0.0001328 -0.0000418 0.0000168 -0.0000053 + 175899.5800000 0.0005607 -0.0001766 0.0000709 -0.0000226 + 57387.4970000 0.0020401 -0.0006434 0.0002582 -0.0000823 + 20717.1810000 0.0066235 -0.0020999 0.0008433 -0.0002684 + 8078.8899000 0.0194996 -0.0062453 0.0025115 -0.0008014 + 3349.5170000 0.0519364 -0.0170804 0.0068921 -0.0021937 + 1459.7812000 0.1221166 -0.0423815 0.0172220 -0.0055074 + 662.8939100 0.2383653 -0.0928679 0.0383159 -0.0122266 + 311.3921500 0.3407051 -0.1657390 0.0705438 -0.0227617 + 149.9375100 0.2792855 -0.1955088 0.0880717 -0.0283606 + 72.4982490 0.0840992 -0.0016409 0.0006328 -0.0007565 + 35.5693540 0.0025042 0.4530071 -0.2881065 0.1001365 + 17.7666330 0.0013574 0.5370751 -0.5049797 0.1815332 + 8.7123830 -0.0006591 0.1528971 -0.0267773 0.0111867 + 4.1449710 0.0002701 0.0057411 0.7098718 -0.3575843 + 1.9696490 -0.0001436 0.0017414 0.5158020 -0.4572305 +Kr S + 0.6799520 1.0000000 +Kr S + 0.3245020 1.0000000 +Kr S + 0.1374410 1.0000000 +Kr S + 0.0503880 1.0000000 +Kr P + 28600.8310000 0.0000605 -0.0000246 0.0000067 + 6770.9912000 0.0005378 -0.0002192 0.0000596 + 2199.0489000 0.0030934 -0.0012628 0.0003432 + 841.1795700 0.0135150 -0.0055756 0.0015190 + 356.7663300 0.0470959 -0.0197546 0.0053881 + 162.6362000 0.1296200 -0.0564488 0.0154935 + 77.9660350 0.2661108 -0.1214923 0.0335176 + 38.6614890 0.3678058 -0.1794907 0.0501911 + 19.5767910 0.2740372 -0.0962314 0.0244550 + 9.7917610 0.0787113 0.2163190 -0.0752953 + 4.8353830 0.0049842 0.4899721 -0.1760534 + 2.3681250 0.0012267 0.3726758 -0.1570724 + 1.0899960 -0.0002448 0.0750088 0.1304579 +Kr P + 0.5045880 1.0000000 +Kr P + 0.2184550 1.0000000 +Kr P + 0.0899590 1.0000000 +Kr P + 0.0344570 1.0000000 +Kr D + 1437.7792000 0.0001108 + 434.2684600 0.0010828 + 168.9269900 0.0064065 + 74.7775350 0.0262379 + 35.5160240 0.0788235 + 17.6710510 0.1770677 + 9.0046110 0.2839622 + 4.5947730 0.3294702 + 2.3264860 0.2589001 +Kr D + 1.1332470 1.0000000 +Kr D + 0.4813070 1.0000000 +Kr D + 0.2053000 1.0000000 +Kr D + 0.1039000 1.0000000 +Kr F + 0.4130000 1.0000000 +Kr F + 0.9557000 1.0000000 +Kr F + 0.2256000 1.0000000 +Kr G + 0.7395000 1.0000000 +Kr G + 0.3590000 1.0000000 +END + diff --git a/oep-wy/basis/OEP_stable.dat b/oep-wy/basis/OEP_stable.dat new file mode 100644 index 0000000..b9943cf --- /dev/null +++ b/oep-wy/basis/OEP_stable.dat @@ -0,0 +1,124 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +#BASIS SET: (13s/9p/5d/4f) -> [13s/9p/5d/4f] +F S +1.000000 1.0 +F S +2.000000 1.0 +F S +4.000000 1.0 +F S +8.000000 1.0 +F S +16.00000 1.0 +F S +32.00000 1.0 +F S +64.00000 1.0 +F S +128.0000 1.0 +F S +256.0000 1.0 +F S +512.0000 1.0 +F S +1024.000 1.0 +F S +2048.000 1.0 +F S +4096.000 1.0 +F P +1.000000 1.0 +F P +2.000000 1.0 +F P +4.000000 1.0 +F P +8.000000 1.0 +F P +16.00000 1.0 +F P +32.00000 1.0 +F P +64.00000 1.0 +F P +128.0000 1.0 +F P +256.0000 1.0 +F D +1.000000 1.0 +F D +2.000000 1.0 +F D +4.000000 1.0 +F D +8.000000 1.0 +F D +16.00000 1.0 +F F +1.000000 1.0 +F F +2.000000 1.0 +F F +4.000000 1.0 +F F +8.000000 1.0 +END + diff --git a/oep-wy/basis/S10P6_0_0.1.dat b/oep-wy/basis/S10P6_0_0.1.dat new file mode 100644 index 0000000..a4c28d0 --- /dev/null +++ b/oep-wy/basis/S10P6_0_0.1.dat @@ -0,0 +1,69 @@ +BASIS "ao basis" PRINT +#BASIS SET: (10s/6p) -> [10s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +204.8000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +#BASIS SET: (10s/6p) -> [10s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +204.8000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S10P7_0_0.1.dat b/oep-wy/basis/S10P7_0_0.1.dat new file mode 100644 index 0000000..7de73af --- /dev/null +++ b/oep-wy/basis/S10P7_0_0.1.dat @@ -0,0 +1,73 @@ +BASIS "ao basis" PRINT +#BASIS SET: (10s/6p) -> [10s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +204.8000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +#BASIS SET: (10s/6p) -> [10s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +204.8000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +He P +6.400000 1.0 +END + diff --git a/oep-wy/basis/S10P8_-2_0.1.dat b/oep-wy/basis/S10P8_-2_0.1.dat new file mode 100644 index 0000000..c203267 --- /dev/null +++ b/oep-wy/basis/S10P8_-2_0.1.dat @@ -0,0 +1,69 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.050000 1.0 +H S +0.025000 1.0 +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.050000 1.0 +H P +0.025000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S12P6.dat b/oep-wy/basis/S12P6.dat new file mode 100644 index 0000000..30921f0 --- /dev/null +++ b/oep-wy/basis/S12P6.dat @@ -0,0 +1,39 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/6p) -> [12s/6p] +H S +0.500000 1.0 +H S +1.000000 1.0 +H S +2.000000 1.0 +H S +4.000000 1.0 +H S +8.000000 1.0 +H S +16.00000 1.0 +H S +32.00000 1.0 +H S +64.00000 1.0 +H S +128.0000 1.0 +H S +256.0000 1.0 +H S +512.0000 1.0 +H S +1024.000 1.0 +H P +0.500000 1.0 +H P +1.000000 1.0 +H P +2.000000 1.0 +H P +4.000000 1.0 +H P +8.000000 1.0 +H P +16.00000 1.0 +END diff --git a/oep-wy/basis/S12P82D_0_0.1.dat b/oep-wy/basis/S12P82D_0_0.1.dat new file mode 100644 index 0000000..a5e1730 --- /dev/null +++ b/oep-wy/basis/S12P82D_0_0.1.dat @@ -0,0 +1,48 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +51.20000 1.0 +H S +102.4000 1.0 +H S +204.8000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +H P +12.80000 1.0 +H D +0.100000 1.0 +H D +0.200000 1.0 +END + diff --git a/oep-wy/basis/S12P8_-1_0.1.dat b/oep-wy/basis/S12P8_-1_0.1.dat new file mode 100644 index 0000000..aa94398 --- /dev/null +++ b/oep-wy/basis/S12P8_-1_0.1.dat @@ -0,0 +1,44 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.050000 1.0 +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +51.20000 1.0 +H S +102.4000 1.0 +H P +0.050000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +END + diff --git a/oep-wy/basis/S12P8_-1_1.dat b/oep-wy/basis/S12P8_-1_1.dat new file mode 100644 index 0000000..73d3730 --- /dev/null +++ b/oep-wy/basis/S12P8_-1_1.dat @@ -0,0 +1,43 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.500000 1.0 +H S +1.000000 1.0 +H S +2.000000 1.0 +H S +4.000000 1.0 +H S +8.000000 1.0 +H S +16.00000 1.0 +H S +32.00000 1.0 +H S +64.00000 1.0 +H S +128.0000 1.0 +H S +256.0000 1.0 +H S +512.0000 1.0 +H S +1024.000 1.0 +H P +0.500000 1.0 +H P +1.000000 1.0 +H P +2.000000 1.0 +H P +4.000000 1.0 +H P +8.000000 1.0 +H P +16.00000 1.0 +H P +32.00000 1.0 +H P +64.00000 1.0 +END diff --git a/oep-wy/basis/S12P8_-2_0.1.dat b/oep-wy/basis/S12P8_-2_0.1.dat new file mode 100644 index 0000000..b7b4eaf --- /dev/null +++ b/oep-wy/basis/S12P8_-2_0.1.dat @@ -0,0 +1,46 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.025000 1.0 +H S +0.050000 1.0 +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +51.20000 1.0 +H S +102.4000 1.0 +H P +0.025000 1.0 +H P +0.050000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S12P8_-2_1.dat b/oep-wy/basis/S12P8_-2_1.dat new file mode 100644 index 0000000..397b55e --- /dev/null +++ b/oep-wy/basis/S12P8_-2_1.dat @@ -0,0 +1,43 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.250000 1.0 +H S +0.500000 1.0 +H S +1.000000 1.0 +H S +2.000000 1.0 +H S +4.000000 1.0 +H S +8.000000 1.0 +H S +16.00000 1.0 +H S +32.00000 1.0 +H S +64.00000 1.0 +H S +128.0000 1.0 +H S +256.0000 1.0 +H S +512.0000 1.0 +H P +0.250000 1.0 +H P +0.500000 1.0 +H P +1.000000 1.0 +H P +2.000000 1.0 +H P +4.000000 1.0 +H P +8.000000 1.0 +H P +16.00000 1.0 +H P +32.00000 1.0 +END diff --git a/oep-wy/basis/S12P8_0_0.1.dat b/oep-wy/basis/S12P8_0_0.1.dat new file mode 100644 index 0000000..a8483d3 --- /dev/null +++ b/oep-wy/basis/S12P8_0_0.1.dat @@ -0,0 +1,85 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +51.20000 1.0 +H S +102.4000 1.0 +H S +204.8000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +H P +12.80000 1.0 +#BASIS SET: (12s/8p) -> [12s/8p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +51.20000 1.0 +He S +102.4000 1.0 +He S +204.8000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +He P +6.400000 1.0 +He P +12.80000 1.0 +END + diff --git a/oep-wy/basis/S12P8_0_1.dat b/oep-wy/basis/S12P8_0_1.dat new file mode 100644 index 0000000..5618bee --- /dev/null +++ b/oep-wy/basis/S12P8_0_1.dat @@ -0,0 +1,43 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +1.000000 1.0 +H S +2.000000 1.0 +H S +4.000000 1.0 +H S +8.000000 1.0 +H S +16.00000 1.0 +H S +32.00000 1.0 +H S +64.00000 1.0 +H S +128.0000 1.0 +H S +256.0000 1.0 +H S +512.0000 1.0 +H S +1024.000 1.0 +H S +2048.000 1.0 +H P +1.000000 1.0 +H P +2.000000 1.0 +H P +4.000000 1.0 +H P +8.000000 1.0 +H P +16.00000 1.0 +H P +32.00000 1.0 +H P +64.00000 1.0 +H P +128.0000 1.0 +END diff --git a/oep-wy/basis/S12_-1_0.1.dat b/oep-wy/basis/S12_-1_0.1.dat new file mode 100644 index 0000000..6acca79 --- /dev/null +++ b/oep-wy/basis/S12_-1_0.1.dat @@ -0,0 +1,28 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s) -> [12s] +He S +0.05000 1.0 +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +51.20000 1.0 +He S +102.4000 1.0 +END + diff --git a/oep-wy/basis/S12_0_0.1.dat b/oep-wy/basis/S12_0_0.1.dat new file mode 100644 index 0000000..dab1a60 --- /dev/null +++ b/oep-wy/basis/S12_0_0.1.dat @@ -0,0 +1,28 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s) -> [12s] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +51.20000 1.0 +He S +102.4000 1.0 +He S +204.8000 1.0 +END + diff --git a/oep-wy/basis/S13P9_0_0.1.dat b/oep-wy/basis/S13P9_0_0.1.dat new file mode 100644 index 0000000..1c80ef9 --- /dev/null +++ b/oep-wy/basis/S13P9_0_0.1.dat @@ -0,0 +1,48 @@ +BASIS "ao basis" PRINT +#BASIS SET: (13s/9p) -> [13s/9p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H S +51.20000 1.0 +H S +102.4000 1.0 +H S +204.8000 1.0 +H S +409.6000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +H P +12.80000 1.0 +H P +25.60000 1.0 +END + diff --git a/oep-wy/basis/S13_-1_0.1.dat b/oep-wy/basis/S13_-1_0.1.dat new file mode 100644 index 0000000..0761e06 --- /dev/null +++ b/oep-wy/basis/S13_-1_0.1.dat @@ -0,0 +1,30 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s) -> [12s] +He S +0.05000 1.0 +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He S +25.60000 1.0 +He S +51.20000 1.0 +He S +102.4000 1.0 +He S +204.8000 1.0 +END + diff --git a/oep-wy/basis/S4P1.dat b/oep-wy/basis/S4P1.dat new file mode 100644 index 0000000..401d10d --- /dev/null +++ b/oep-wy/basis/S4P1.dat @@ -0,0 +1,13 @@ +BASIS "ao basis" PRINT +#BASIS SET: (4s/1p) -> [4s/1p] +H S +0.5000000 1.0000000 +H S +2.0000000 1.0000000 +H S +8.0000000 1.0000000 +H S +16.000000 1.0000000 +H P +4.0000000 1.0000000 +END diff --git a/oep-wy/basis/S6P4.dat b/oep-wy/basis/S6P4.dat new file mode 100644 index 0000000..a1bae12 --- /dev/null +++ b/oep-wy/basis/S6P4.dat @@ -0,0 +1,23 @@ +BASIS "ao basis" PRINT +#BASIS SET: (6s/4p) -> [6s/4p] +H S +1.000000 1.0 +H S +2.000000 1.0 +H S +4.000000 1.0 +H S +8.000000 1.0 +H S +16.00000 1.0 +H S +32.00000 1.0 +H P +1.000000 1.0 +H P +2.000000 1.0 +H P +4.000000 1.0 +H P +8.000000 1.0 +END diff --git a/oep-wy/basis/S6P4_0_0.1.dat b/oep-wy/basis/S6P4_0_0.1.dat new file mode 100644 index 0000000..ad2687d --- /dev/null +++ b/oep-wy/basis/S6P4_0_0.1.dat @@ -0,0 +1,66 @@ +BASIS "ao basis" PRINT +#BASIS SET: (6s/4p) -> [6s/4p] +GHOST S +0.100000 1.0 +GHOST S +0.200000 1.0 +GHOST S +0.400000 1.0 +GHOST S +0.800000 1.0 +GHOST S +1.600000 1.0 +GHOST S +3.200000 1.0 +GHOST P +0.100000 1.0 +GHOST P +0.200000 1.0 +GHOST P +0.400000 1.0 +GHOST P +0.800000 1.0 +#BASIS SET: (6s/4p) -> [6s/4p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +#BASIS SET: (6s/4p) -> [6s/4p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +END + diff --git a/oep-wy/basis/S7P5_0_0.1.dat b/oep-wy/basis/S7P5_0_0.1.dat new file mode 100644 index 0000000..bac6afb --- /dev/null +++ b/oep-wy/basis/S7P5_0_0.1.dat @@ -0,0 +1,78 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +GHOST S +0.100000 1.0 +GHOST S +0.200000 1.0 +GHOST S +0.400000 1.0 +GHOST S +0.800000 1.0 +GHOST S +1.600000 1.0 +GHOST S +3.200000 1.0 +GHOST S +6.400000 1.0 +GHOST P +0.100000 1.0 +GHOST P +0.200000 1.0 +GHOST P +0.400000 1.0 +GHOST P +0.800000 1.0 +GHOST P +1.600000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +END + diff --git a/oep-wy/basis/S8P10_0_0.1.dat b/oep-wy/basis/S8P10_0_0.1.dat new file mode 100644 index 0000000..5b7a661 --- /dev/null +++ b/oep-wy/basis/S8P10_0_0.1.dat @@ -0,0 +1,69 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +H P +12.80000 1.0 +H P +25.60000 1.0 +H P +51.20000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S8P6_0_0.1.dat b/oep-wy/basis/S8P6_0_0.1.dat new file mode 100644 index 0000000..92132fc --- /dev/null +++ b/oep-wy/basis/S8P6_0_0.1.dat @@ -0,0 +1,90 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +GHOST S +0.100000 1.0 +GHOST S +0.200000 1.0 +GHOST S +0.400000 1.0 +GHOST S +0.800000 1.0 +GHOST S +1.600000 1.0 +GHOST S +3.200000 1.0 +GHOST S +6.400000 1.0 +GHOST S +12.80000 1.0 +GHOST P +0.100000 1.0 +GHOST P +0.200000 1.0 +GHOST P +0.400000 1.0 +GHOST P +0.800000 1.0 +GHOST P +1.600000 1.0 +GHOST P +3.200000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S8P8_0_0.1.dat b/oep-wy/basis/S8P8_0_0.1.dat new file mode 100644 index 0000000..fdb4216 --- /dev/null +++ b/oep-wy/basis/S8P8_0_0.1.dat @@ -0,0 +1,65 @@ +BASIS "ao basis" PRINT +#BASIS SET: (8s/6p) -> [8s/6p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +H P +6.400000 1.0 +H P +12.80000 1.0 +#BASIS SET: (8s/6p) -> [8s/6p] +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/S9P5_0_0.1.dat b/oep-wy/basis/S9P5_0_0.1.dat new file mode 100644 index 0000000..f9618da --- /dev/null +++ b/oep-wy/basis/S9P5_0_0.1.dat @@ -0,0 +1,32 @@ +BASIS "ao basis" PRINT +#BASIS SET: (12s/8p) -> [12s/8p] +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H S +25.60000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +END + diff --git a/oep-wy/basis/S9P7_-1_0.1.dat b/oep-wy/basis/S9P7_-1_0.1.dat new file mode 100644 index 0000000..bb57954 --- /dev/null +++ b/oep-wy/basis/S9P7_-1_0.1.dat @@ -0,0 +1,69 @@ +BASIS "ao basis" PRINT +#BASIS SET: (9s/7p) -> [9s/7p] +H S +0.050000 1.0 +H S +0.100000 1.0 +H S +0.200000 1.0 +H S +0.400000 1.0 +H S +0.800000 1.0 +H S +1.600000 1.0 +H S +3.200000 1.0 +H S +6.400000 1.0 +H S +12.80000 1.0 +H P +0.050000 1.0 +H P +0.100000 1.0 +H P +0.200000 1.0 +H P +0.400000 1.0 +H P +0.800000 1.0 +H P +1.600000 1.0 +H P +3.200000 1.0 +#BASIS SET: (9s/7p) -> [9s/7p] +He S +0.050000 1.0 +He S +0.100000 1.0 +He S +0.200000 1.0 +He S +0.400000 1.0 +He S +0.800000 1.0 +He S +1.600000 1.0 +He S +3.200000 1.0 +He S +6.400000 1.0 +He S +12.80000 1.0 +He P +0.050000 1.0 +He P +0.100000 1.0 +He P +0.200000 1.0 +He P +0.400000 1.0 +He P +0.800000 1.0 +He P +1.600000 1.0 +He P +3.200000 1.0 +END + diff --git a/oep-wy/basis/SxPy_start_coef b/oep-wy/basis/SxPy_start_coef new file mode 100644 index 0000000..e69de29 diff --git a/oep-wy/basis/aug-cc-pvdz-x1.dat b/oep-wy/basis/aug-cc-pvdz-x1.dat new file mode 100644 index 0000000..8aeee79 --- /dev/null +++ b/oep-wy/basis/aug-cc-pvdz-x1.dat @@ -0,0 +1,47 @@ + +BASIS "ao basis" PRINT +#BASIS SET: (8s,3p) -> [6s,3p] +H S + 13.0100000 0.0196850 + 1.9620000 0.1379770 + 0.4446000 0.4781480 +H S + 0.1220000 1.0000000 +H S + 7.4860000 1.0000000 +H S + 1.2033000 1.0000000 +H S + 0.2833000 1.0000000 +H S + 0.0297400 1.0000000 +H P + 0.7270000 1.0000000 +H P + 0.1410000 1.0000000 +H P + 0.4340000 1.0000000 +#BASIS SET: (8s,3p) -> [6s,3p] +He S + 38.3600000 0.0238090 + 5.7700000 0.1548910 + 1.2400000 0.4699870 +He S + 0.2976000 1.0000000 +He S + 0.0725500 1.0000000 +He S + 22.065000 1.0000000 +He S + 3.505000 1.0000000 +He S + 0.768800 1.0000000 +He S + 0.185075 1.0000000 +He P + 1.2750000 1.0000000 +He P + 0.2473000 1.0000000 +He P + 0.7611500 1.0000000 + diff --git a/oep-wy/basis/aug-cc-pvqz-xc1.dat b/oep-wy/basis/aug-cc-pvqz-xc1.dat new file mode 100644 index 0000000..8f76b33 --- /dev/null +++ b/oep-wy/basis/aug-cc-pvqz-xc1.dat @@ -0,0 +1,68 @@ +BASIS "ao basis" PRINT +#BASIS SET: (7s,4p,3d,2f) -> [5s,4p,3d,2f] +H S + 82.6400000 1.0000000 +H S + 12.4100000 1.0000000 +H S + 2.8240000 1.0000000 +H S + 0.7977000 1.0000000 +H S + 0.2581000 1.0000000 +H S + 0.0898900 1.0000000 +H S + 0.0236300 1.0000000 +H P + 2.2920000 1.0000000 +H P + 0.8380000 1.0000000 +H P + 0.2920000 1.0000000 +H P + 0.0848000 1.0000000 +H D + 2.0620000 1.0000000 +H D + 0.6620000 1.0000000 +H D + 0.1900000 1.0000000 +H F + 1.3970000 1.0000000 +H F + 0.3600000 1.0000000 +#BASIS SET: (8s,4p,3d,2f) -> [5s,4p,3d,2f] +He S + 528.5000000 0.0009400 + 79.3100000 0.0072140 + 18.0500000 0.0359750 + 5.0850000 0.1277820 +He S + 1.6090000 1.0000000 +He S + 0.5363000 1.0000000 +He S + 0.1833000 1.0000000 +He S + 0.0481900 1.0000000 +He P + 5.9940000 1.0000000 +He P + 1.7450000 1.0000000 +He P + 0.5600000 1.0000000 +He P + 0.1626000 1.0000000 +He D + 4.2990000 1.0000000 +He D + 1.2230000 1.0000000 +He D + 0.3510000 1.0000000 +He F + 2.6800000 1.0000000 +He F + 0.6906000 1.0000000 +END + diff --git a/oep-wy/basis/aug-cc-pvtz-x1.dat b/oep-wy/basis/aug-cc-pvtz-x1.dat new file mode 100644 index 0000000..afd8b67 --- /dev/null +++ b/oep-wy/basis/aug-cc-pvtz-x1.dat @@ -0,0 +1,1741 @@ + +BASIS "ao basis" PRINT +#BASIS SET: (6s,3p,2d) -> [4s,3p,2d] +H S + 33.8700000 0.0060680 + 5.0950000 0.0453080 + 1.1590000 0.2028220 +H S + 0.3258000 1.0000000 +H S + 0.1027000 1.0000000 +H S + 0.0252600 1.0000000 +H P + 1.4070000 1.0000000 +H P + 0.3880000 1.0000000 +H P + 0.1020000 1.0000000 +H D + 1.0570000 1.0000000 +H D + 0.2470000 1.0000000 +#BASIS SET: (7s,3p,2d) -> [4s,3p,2d] +He S + 234.0000000 0.0025870 + 35.1600000 0.0195330 + 7.9890000 0.0909980 + 2.2120000 0.2720500 +He S + 0.6669000 1.0000000 +He S + 0.2089000 1.0000000 +He S + 0.0513800 1.0000000 +He P + 3.0440000 1.0000000 +He P + 0.7580000 1.0000000 +He P + 0.1993000 1.0000000 +He D + 1.9650000 1.0000000 +He D + 0.4592000 1.0000000 +#BASIS SET: (12s,6p,3d,2f) -> [5s,4p,3d,2f] +Li S + 5988.0000000 0.0001330 -0.0000210 + 898.9000000 0.0010250 -0.0001610 + 205.9000000 0.0052720 -0.0008200 + 59.2400000 0.0209290 -0.0033260 + 19.8700000 0.0663400 -0.0105190 + 7.4060000 0.1657750 -0.0280970 + 2.9300000 0.3150380 -0.0559360 + 1.1890000 0.3935230 -0.0992370 + 0.4798000 0.1908700 -0.1121890 +Li S + 0.0750900 1.0000000 +Li S + 0.0283200 1.0000000 +Li S + 0.0076000 1.0000000 +Li P + 3.2660000 0.0086300 + 0.6511000 0.0475380 + 0.1696000 0.2097720 +Li P + 0.0557800 1.0000000 +Li P + 0.0205000 1.0000000 +Li P + 0.0091000 1.0000000 +Li D + 0.1874000 1.0000000 +Li D + 0.0801000 1.0000000 +Li D + 0.0371000 1.0000000 +Li F + 0.1829000 1.0000000 +Li F + 0.0816000 1.0000000 +#BASIS SET: (12s,6p,3d,2f) -> [5s,4p,3d,2f] +Be S + 6863.0000000 0.0002360 -0.0000430 + 1030.0000000 0.0018260 -0.0003330 + 234.7000000 0.0094520 -0.0017360 + 66.5600000 0.0379570 -0.0070120 + 21.6900000 0.1199650 -0.0231260 + 7.7340000 0.2821620 -0.0581380 + 2.9160000 0.4274040 -0.1145560 + 1.1300000 0.2662780 -0.1359080 + 0.1101000 -0.0072750 0.5774410 +Be S + 0.2577000 1.0000000 +Be S + 0.0440900 1.0000000 +Be S + 0.0150300 1.0000000 +Be P + 7.4360000 0.0107360 + 1.5770000 0.0628540 + 0.4352000 0.2481800 +Be P + 0.1438000 1.0000000 +Be P + 0.0499400 1.0000000 +Be P + 0.0070600 1.0000000 +Be D + 0.3480000 1.0000000 +Be D + 0.1803000 1.0000000 +Be D + 0.0654000 1.0000000 +Be F + 0.3250000 1.0000000 +Be F + 0.1533000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +B S + 5473.0000000 0.0005550 -0.0001120 + 820.9000000 0.0042910 -0.0008680 + 186.8000000 0.0219490 -0.0044840 + 52.8300000 0.0844410 -0.0176830 + 17.0800000 0.2385570 -0.0536390 + 5.9990000 0.4350720 -0.1190050 + 2.2080000 0.3419550 -0.1658240 + 0.2415000 -0.0095450 0.5959810 +B S + 0.5879000 1.0000000 +B S + 0.0861000 1.0000000 +B S + 0.0291400 1.0000000 +B P + 12.0500000 0.0131180 + 2.6130000 0.0798960 + 0.7475000 0.2772750 +B P + 0.2385000 1.0000000 +B P + 0.0769800 1.0000000 +B P + 0.0209600 1.0000000 +B D + 0.6610000 1.0000000 +B D + 0.1990000 1.0000000 +B D + 0.0604000 1.0000000 +B F + 0.4900000 1.0000000 +B F + 0.1630000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +C S + 8236.0000000 0.0005310 -0.0001130 + 1235.0000000 0.0041080 -0.0008780 + 280.8000000 0.0210870 -0.0045400 + 79.2700000 0.0818530 -0.0181330 + 25.5900000 0.2348170 -0.0557600 + 8.9970000 0.4344010 -0.1268950 + 3.3190000 0.3461290 -0.1703520 + 0.3643000 -0.0089830 0.5986840 +C S + 0.9059000 1.0000000 +C S + 0.1285000 1.0000000 +C S + 0.0440200 1.0000000 +C P + 18.7100000 0.0140310 + 4.1330000 0.0868660 + 1.2000000 0.2902160 +C P + 0.3827000 1.0000000 +C P + 0.1209000 1.0000000 +C P + 0.0356900 1.0000000 +C D + 1.0970000 1.0000000 +C D + 0.3180000 1.0000000 +C D + 0.1000000 1.0000000 +C F + 0.7610000 1.0000000 +C F + 0.2680000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +N S + 11420.0000000 0.0005230 -0.0001150 + 1712.0000000 0.0040450 -0.0008950 + 389.3000000 0.0207750 -0.0046240 + 110.0000000 0.0807270 -0.0185280 + 35.5700000 0.2330740 -0.0573390 + 12.5400000 0.4335010 -0.1320760 + 4.6440000 0.3474720 -0.1725100 + 0.5118000 -0.0085080 0.5999440 +N S + 1.2930000 1.0000000 +N S + 0.1787000 1.0000000 +N S + 0.0576000 1.0000000 +N P + 26.6300000 0.0146700 + 5.9480000 0.0917640 + 1.7420000 0.2986830 +N P + 0.5550000 1.0000000 +N P + 0.1725000 1.0000000 +N P + 0.0491000 1.0000000 +N D + 1.6540000 1.0000000 +N D + 0.4690000 1.0000000 +N D + 0.1510000 1.0000000 +N F + 1.0930000 1.0000000 +N F + 0.3640000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +O S + 15330.0000000 0.0005080 -0.0001150 + 2299.0000000 0.0039290 -0.0008950 + 522.4000000 0.0202430 -0.0046360 + 147.3000000 0.0791810 -0.0187240 + 47.5500000 0.2306870 -0.0584630 + 16.7600000 0.4331180 -0.1364630 + 6.2070000 0.3502600 -0.1757400 + 0.6882000 -0.0081540 0.6034180 +O S + 1.7520000 1.0000000 +O S + 0.2384000 1.0000000 +O S + 0.0737600 1.0000000 +O P + 34.4600000 0.0159280 + 7.7490000 0.0997400 + 2.2800000 0.3104920 +O P + 0.7156000 1.0000000 +O P + 0.2140000 1.0000000 +O P + 0.0597400 1.0000000 +O D + 2.3140000 1.0000000 +O D + 0.6450000 1.0000000 +O D + 0.2140000 1.0000000 +O F + 1.4280000 1.0000000 +O F + 0.5000000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +F S + 19500.0000000 0.0005070 -0.0001170 + 2923.0000000 0.0039230 -0.0009120 + 664.5000000 0.0202000 -0.0047170 + 187.5000000 0.0790100 -0.0190860 + 60.6200000 0.2304390 -0.0596550 + 21.4200000 0.4328720 -0.1400100 + 7.9500000 0.3499640 -0.1767820 + 0.8815000 -0.0078920 0.6050430 +F S + 2.2570000 1.0000000 +F S + 0.3041000 1.0000000 +F S + 0.0915800 1.0000000 +F P + 43.8800000 0.0166650 + 9.9260000 0.1044720 + 2.9300000 0.3172600 +F P + 0.9132000 1.0000000 +F P + 0.2672000 1.0000000 +F P + 0.0736100 1.0000000 +F D + 3.1070000 1.0000000 +F D + 0.8550000 1.0000000 +F D + 0.2920000 1.0000000 +F F + 1.9170000 1.0000000 +F F + 0.7240000 1.0000000 +#BASIS SET: (11s,6p,3d,2f) -> [5s,4p,3d,2f] +Ne S + 24350.0000000 0.0005020 -0.0001180 + 3650.0000000 0.0038810 -0.0009150 + 829.6000000 0.0199970 -0.0047370 + 234.0000000 0.0784180 -0.0192330 + 75.6100000 0.2296760 -0.0603690 + 26.7300000 0.4327220 -0.1425080 + 9.9270000 0.3506420 -0.1777100 + 1.1020000 -0.0076450 0.6058360 +Ne S + 2.8360000 1.0000000 +Ne S + 0.3782000 1.0000000 +Ne S + 0.1133000 1.0000000 +Ne P + 54.7000000 0.0171510 + 12.4300000 0.1076560 + 3.6790000 0.3216810 +Ne P + 1.1430000 1.0000000 +Ne P + 0.3300000 1.0000000 +Ne P + 0.0917500 1.0000000 +Ne D + 4.0140000 1.0000000 +Ne D + 1.0960000 1.0000000 +Ne D + 0.3860000 1.0000000 +Ne F + 2.5440000 1.0000000 +Ne F + 1.0840000 1.0000000 +#BASIS SET: (17s,11p,3d,2f) -> [6s,5p,3d,2f] +Na S + 423000.0000000 0.180618D-04 -0.440653D-05 0.663019D-06 + 63340.0000000 0.140430D-03 -0.343443D-04 0.515769D-05 + 14410.0000000 0.738438D-03 -0.180114D-03 0.271250D-04 + 4077.0000000 0.311182D-02 -0.763900D-03 0.114635D-03 + 1328.0000000 0.112081D-01 -0.275248D-02 0.415118D-03 + 478.6000000 0.352828D-01 -0.886016D-02 0.132978D-02 + 186.2000000 0.959897D-01 -0.247939D-01 0.375595D-02 + 76.9200000 0.213735D+00 -0.605995D-01 0.914025D-02 + 33.3200000 0.348688D+00 -0.116446D+00 0.179859D-01 + 15.0000000 0.324566D+00 -0.162437D+00 0.251477D-01 + 6.8690000 0.112633D+00 -0.438891D-01 0.763522D-02 + 2.6830000 0.706797D-02 0.337917D+00 -0.614589D-01 + 1.1090000 0.598010D-03 0.561347D+00 -0.115721D+00 + 0.0601500 -0.530870D-05 0.406754D-02 0.626406D+00 +Na S + 0.4540000 1.0000000 +Na S + 0.0238200 1.0000000 +Na S + 0.0066500 1.0000000 +Na P + 243.3000000 0.224392D-02 -0.222401D-03 + 57.3900000 0.173997D-01 -0.174277D-02 + 18.1000000 0.774125D-01 -0.775456D-02 + 6.5750000 0.219102D+00 -0.225187D-01 + 2.5210000 0.378522D+00 -0.384330D-01 + 0.9607000 0.394902D+00 -0.450177D-01 + 0.3512000 0.160424D+00 -0.192132D-01 + 0.0982700 0.233311D-02 0.182697D+00 +Na P + 0.0373400 1.0000000 +Na P + 0.0150000 1.0000000 +Na P + 0.0070000 1.0000000 +Na D + 0.1367000 1.0000000 +Na D + 0.0636000 1.0000000 +Na D + 0.0223000 1.0000000 +Na F + 0.1397000 1.0000000 +Na F + 0.0714000 1.0000000 +#BASIS SET: (16s,11p,3d,2f) -> [6s,5p,3d,2f] +Mg S + 164900.0000000 0.729929D-04 -0.184248D-04 0.355176D-05 + 24710.0000000 0.566652D-03 -0.143500D-03 0.276420D-04 + 5628.0000000 0.296269D-02 -0.748710D-03 0.144404D-03 + 1596.0000000 0.122962D-01 -0.314407D-02 0.605744D-03 + 521.0000000 0.427324D-01 -0.110481D-01 0.213527D-02 + 188.0000000 0.123013D+00 -0.336058D-01 0.649934D-02 + 73.0100000 0.274832D+00 -0.825946D-01 0.161446D-01 + 29.9000000 0.401818D+00 -0.159314D+00 0.315766D-01 + 12.5400000 0.264697D+00 -0.152888D+00 0.316374D-01 + 4.3060000 0.332612D-01 0.190849D+00 -0.439140D-01 + 1.8260000 -0.441335D-02 0.579964D+00 -0.151093D+00 + 0.7417000 0.206024D-02 0.372029D+00 -0.217668D+00 + 0.0761200 0.708195D-03 -0.119344D-01 0.547245D+00 +Mg S + 0.1457000 1.0000000 +Mg S + 0.0331000 1.0000000 +Mg S + 0.0129000 1.0000000 +Mg P + 316.9000000 0.207532D-02 -0.329727D-03 + 74.8600000 0.162869D-01 -0.258754D-02 + 23.7200000 0.738697D-01 -0.119120D-01 + 8.6690000 0.214297D+00 -0.350227D-01 + 3.3630000 0.382154D+00 -0.639968D-01 + 1.3100000 0.398178D+00 -0.704436D-01 + 0.4911000 0.152878D+00 -0.375836D-01 + 0.2364000 -0.437540D-02 0.177043D+00 +Mg P + 0.0873300 1.0000000 +Mg P + 0.0323700 1.0000000 +Mg P + 0.0074500 1.0000000 +Mg D + 0.1260000 1.0000000 +Mg D + 0.2940000 1.0000000 +Mg D + 0.0468000 1.0000000 +Mg F + 0.2520000 1.0000000 +Mg F + 0.0940000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +Al S + 205500.0000000 0.678836D-04 -0.176377D-04 0.407315D-05 + 30780.0000000 0.527149D-03 -0.137195D-03 0.316566D-04 + 7006.0000000 0.276203D-02 -0.718910D-03 0.166116D-03 + 1985.0000000 0.114728D-01 -0.301146D-02 0.694992D-03 + 649.1000000 0.398188D-01 -0.106014D-01 0.245511D-02 + 235.0000000 0.115040D+00 -0.321345D-01 0.744598D-02 + 91.6200000 0.260887D+00 -0.803156D-01 0.188253D-01 + 37.6700000 0.396386D+00 -0.156794D+00 0.372772D-01 + 15.9100000 0.284597D+00 -0.168376D+00 0.419496D-01 + 5.8500000 0.444583D-01 0.126879D+00 -0.354375D-01 + 2.5420000 -0.489838D-02 0.561494D+00 -0.175132D+00 + 1.0570000 0.261253D-02 0.436613D+00 -0.276203D+00 + 0.1455000 0.722068D-03 -0.114563D-01 0.652809D+00 +Al S + 0.2931000 1.0000000 +Al S + 0.0565000 1.0000000 +Al S + 0.0221000 1.0000000 +Al P + 444.4000000 0.162786D-02 -0.286341D-03 + 105.1000000 0.130687D-01 -0.242308D-02 + 33.4700000 0.612341D-01 -0.108658D-01 + 12.3300000 0.187870D+00 -0.364307D-01 + 4.8690000 0.360452D+00 -0.641074D-01 + 1.9610000 0.408454D+00 -0.972239D-01 + 0.1888000 0.976514D-02 0.503448D+00 +Al P + 0.7834000 1.0000000 +Al P + 0.0555700 1.0000000 +Al P + 0.0146000 1.0000000 +Al D + 0.1090000 1.0000000 +Al D + 0.3330000 1.0000000 +Al D + 0.0356000 1.0000000 +Al F + 0.2440000 1.0000000 +Al F + 0.0858000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +Si S + 254900.0000000 0.625101D-04 -0.166370D-04 0.426257D-05 + 38190.0000000 0.485553D-03 -0.129310D-03 0.331062D-04 + 8690.0000000 0.254516D-02 -0.678828D-03 0.174015D-03 + 2462.0000000 0.105866D-01 -0.284117D-02 0.727574D-03 + 804.8000000 0.368787D-01 -0.100551D-01 0.258333D-02 + 291.3000000 0.107479D+00 -0.305774D-01 0.786354D-02 + 113.6000000 0.247936D+00 -0.777256D-01 0.202155D-01 + 46.7500000 0.390927D+00 -0.154236D+00 0.407320D-01 + 19.8200000 0.302026D+00 -0.180368D+00 0.499358D-01 + 7.7080000 0.559236D-01 0.798218D-01 -0.249396D-01 + 3.3400000 -0.402406D-02 0.547441D+00 -0.190350D+00 + 1.4020000 0.258030D-02 0.480119D+00 -0.318350D+00 + 0.2070000 0.607930D-03 -0.106996D-01 0.681180D+00 +Si S + 0.4387000 1.0000000 +Si S + 0.0794400 1.0000000 +Si S + 0.0330000 1.0000000 +Si P + 481.5000000 0.192045D-02 -0.405220D-03 + 113.9000000 0.153552D-01 -0.335896D-02 + 36.2300000 0.713991D-01 -0.152860D-01 + 13.3400000 0.213052D+00 -0.489218D-01 + 5.2520000 0.390354D+00 -0.855008D-01 + 2.1200000 0.393721D+00 -0.112137D+00 + 0.2528000 0.395630D-02 0.551919D+00 +Si P + 0.8561000 1.0000000 +Si P + 0.0788900 1.0000000 +Si P + 0.0237000 1.0000000 +Si D + 0.1590000 1.0000000 +Si D + 0.4810000 1.0000000 +Si D + 0.0556000 1.0000000 +Si F + 0.3360000 1.0000000 +Si F + 0.1250000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +P S + 312400.0000000 0.576960D-04 -0.156709D-04 0.430631D-05 + 46800.0000000 0.448296D-03 -0.121724D-03 0.334194D-04 + 10650.0000000 0.234939D-02 -0.639672D-03 0.175885D-03 + 3018.0000000 0.978265D-02 -0.267426D-02 0.734340D-03 + 986.8000000 0.341467D-01 -0.949831D-02 0.261775D-02 + 357.4000000 0.100204D+00 -0.289349D-01 0.797852D-02 + 139.6000000 0.234372D+00 -0.745121D-01 0.207940D-01 + 57.6300000 0.382434D+00 -0.149938D+00 0.424446D-01 + 24.6000000 0.318088D+00 -0.189467D+00 0.563436D-01 + 10.1200000 0.707788D-01 0.363270D-01 -0.127358D-01 + 4.2830000 -0.181799D-02 0.528816D+00 -0.196495D+00 + 1.8050000 0.216180D-02 0.519115D+00 -0.353555D+00 + 0.2782000 0.432297D-03 -0.925695D-02 0.700912D+00 +P S + 0.6158000 1.0000000 +P S + 0.1055000 1.0000000 +P S + 0.0409000 1.0000000 +P P + 504.9000000 0.233728D-02 -0.555236D-03 + 119.4000000 0.185410D-01 -0.445913D-02 + 37.9600000 0.849693D-01 -0.206350D-01 + 13.9500000 0.244615D+00 -0.617694D-01 + 5.4570000 0.422766D+00 -0.108924D+00 + 2.1770000 0.368439D+00 -0.105599D+00 + 0.2877000 -0.379005D-02 0.576981D+00 +P P + 0.8010000 1.0000000 +P P + 0.0971400 1.0000000 +P P + 0.0307000 1.0000000 +P D + 0.2160000 1.0000000 +P D + 0.6520000 1.0000000 +P D + 0.0775000 1.0000000 +P F + 0.4520000 1.0000000 +P F + 0.1650000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +S S + 374100.0000000 0.542140D-04 -0.149837D-04 0.435066D-05 + 56050.0000000 0.420855D-03 -0.116198D-03 0.337140D-04 + 12760.0000000 0.220698D-02 -0.611583D-03 0.177674D-03 + 3615.0000000 0.919258D-02 -0.255370D-02 0.741116D-03 + 1183.0000000 0.321123D-01 -0.908708D-02 0.264591D-02 + 428.8000000 0.946683D-01 -0.277045D-01 0.807487D-02 + 167.8000000 0.223630D+00 -0.720020D-01 0.212276D-01 + 69.4700000 0.374393D+00 -0.146439D+00 0.438323D-01 + 29.8400000 0.329108D+00 -0.195150D+00 0.612716D-01 + 12.7200000 0.847038D-01 0.819193D-02 -0.361510D-02 + 5.2440000 0.440851D-03 0.516601D+00 -0.204510D+00 + 2.2190000 0.164827D-02 0.542178D+00 -0.381871D+00 + 0.3490000 0.301306D-03 -0.918072D-02 0.714147D+00 +S S + 0.7767000 1.0000000 +S S + 0.1322000 1.0000000 +S S + 0.0497000 1.0000000 +S P + 574.4000000 0.242264D-02 -0.620102D-03 + 135.8000000 0.192796D-01 -0.493882D-02 + 43.1900000 0.885401D-01 -0.232647D-01 + 15.8700000 0.254654D+00 -0.685195D-01 + 6.2080000 0.433984D+00 -0.123896D+00 + 2.4830000 0.354953D+00 -0.969499D-01 + 0.3229000 -0.502977D-02 0.569394D+00 +S P + 0.8688000 1.0000000 +S P + 0.1098000 1.0000000 +S P + 0.0351000 1.0000000 +S D + 0.2690000 1.0000000 +S D + 0.8190000 1.0000000 +S D + 0.1010000 1.0000000 +S F + 0.5570000 1.0000000 +S F + 0.2180000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +Cl S + 456100.0000000 0.492970D-04 -0.138304D-04 0.418546D-05 + 68330.0000000 0.383029D-03 -0.107279D-03 0.324395D-04 + 15550.0000000 0.200854D-02 -0.565083D-03 0.171105D-03 + 4405.0000000 0.838558D-02 -0.236135D-02 0.714176D-03 + 1439.0000000 0.294703D-01 -0.845886D-02 0.256705D-02 + 520.4000000 0.878325D-01 -0.259638D-01 0.788552D-02 + 203.1000000 0.211473D+00 -0.686362D-01 0.210867D-01 + 83.9600000 0.365364D+00 -0.141874D+00 0.442264D-01 + 36.2000000 0.340884D+00 -0.199319D+00 0.651670D-01 + 15.8300000 0.102133D+00 -0.195662D-01 0.603012D-02 + 6.3340000 0.311675D-02 0.499741D+00 -0.206495D+00 + 2.6940000 0.105751D-02 0.563736D+00 -0.405871D+00 + 0.4313000 0.156136D-03 -0.835091D-02 0.725661D+00 +Cl S + 0.9768000 1.0000000 +Cl S + 0.1625000 1.0000000 +Cl S + 0.0591000 1.0000000 +Cl P + 663.3000000 0.240448D-02 -0.652145D-03 + 156.8000000 0.192148D-01 -0.519445D-02 + 49.9800000 0.885097D-01 -0.246938D-01 + 18.4200000 0.256020D+00 -0.728167D-01 + 7.2400000 0.436927D+00 -0.134030D+00 + 2.9220000 0.350334D+00 -0.947742D-01 + 0.3818000 -0.458423D-02 0.564667D+00 +Cl P + 1.0220000 1.0000000 +Cl P + 0.1301000 1.0000000 +Cl P + 0.0419000 1.0000000 +Cl D + 1.0460000 1.0000000 +Cl D + 0.3440000 1.0000000 +Cl D + 0.1350000 1.0000000 +Cl F + 0.7060000 1.0000000 +Cl F + 0.3120000 1.0000000 +#BASIS SET: (16s,10p,3d,2f) -> [6s,5p,3d,2f] +Ar S + 545000.0000000 0.455828D-04 -0.129551D-04 0.404990D-05 + 81640.0000000 0.354108D-03 -0.100428D-03 0.313691D-04 + 18580.0000000 0.185797D-02 -0.529583D-03 0.165646D-03 + 5261.0000000 0.776851D-02 -0.221396D-02 0.691662D-03 + 1717.0000000 0.274232D-01 -0.796845D-02 0.249790D-02 + 619.9000000 0.823836D-01 -0.245803D-01 0.771074D-02 + 241.6000000 0.201230D+00 -0.657798D-01 0.208714D-01 + 99.7900000 0.356781D+00 -0.137942D+00 0.443965D-01 + 43.1500000 0.349563D+00 -0.201630D+00 0.680224D-01 + 19.1400000 0.118266D+00 -0.412834D-01 0.141350D-01 + 7.4880000 0.560190D-02 0.484680D+00 -0.207489D+00 + 3.2050000 0.483473D-03 0.579224D+00 -0.425045D+00 + 0.5204000 0.292025D-04 -0.727553D-02 0.733627D+00 +Ar S + 1.1960000 1.0000000 +Ar S + 0.1954000 1.0000000 +Ar S + 0.0685000 1.0000000 +Ar P + 761.8000000 0.236976D-02 -0.667211D-03 + 180.2000000 0.190199D-01 -0.532717D-02 + 57.5000000 0.880807D-01 -0.255494D-01 + 21.2400000 0.256377D+00 -0.757197D-01 + 8.3880000 0.438711D+00 -0.141133D+00 + 3.4160000 0.347569D+00 -0.932768D-01 + 0.4523000 -0.523882D-02 0.562450D+00 +Ar P + 1.2060000 1.0000000 +Ar P + 0.1545000 1.0000000 +Ar P + 0.0487000 1.0000000 +Ar D + 0.4100000 1.0000000 +Ar D + 1.2540000 1.0000000 +Ar D + 0.1690000 1.0000000 +Ar F + 0.8900000 1.0000000 +Ar F + 0.4060000 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Sc S + 2715278.0000000 8.147221E-06 -4.722109E-06 9.139905E-07 -2.201951E-07 -3.757238E-07 -5.962768E-07 + 406598.4000000 6.334788E-05 -3.671829E-05 7.108513E-06 -1.711419E-06 -2.981907E-06 -4.822853E-06 + 92530.0400000 0.0003330384 -0.0001930883 3.738126E-05 -9.008469E-06 -1.522586E-05 -2.395005E-05 + 26207.9200000 0.001404055 -0.000814687 0.0001578828 -3.799997E-05 -6.684686E-05 -0.0001090335 + 8549.4290000 0.005081725 -0.002955526 0.0005737686 -0.0001383227 -0.0002313129 -0.0003601944 + 3085.9750000 0.01626926 -0.009520035 0.001859244 -0.0004473692 -0.0007959729 -0.001311233 + 1203.1720000 0.04624577 -0.02746858 0.005433182 -0.001310691 -0.002161961 -0.003322435 + 498.4869000 0.1137223 -0.06991528 0.01425387 -0.00342986 -0.006206459 -0.0103752 + 216.7360000 0.2257636 -0.1499251 0.03246144 -0.007847579 -0.01261905 -0.01892174 + 97.8747600 0.3106700 -0.2459153 0.06003454 -0.01447189 -0.02739459 -0.04755287 + 45.2043300 0.2191906 -0.2401293 0.06916105 -0.01690669 -0.02336516 -0.02931692 + 20.2118700 0.07215879 0.03567987 -0.02113084 0.005396115 -0.005734627 -0.03090088 + 9.5747510 0.1187030 0.4915023 -0.2666832 0.06671062 0.1536025 0.3074597 + 4.5403460 0.1220532 0.4911381 -0.4367591 0.1178356 0.1447100 0.1803100 + 1.9956870 0.02136795 0.09120633 0.06498243 -0.02738134 0.09359699 0.2358178 + 0.9422150 -0.0005357246 -0.005356723 0.7009599 -0.2260149 -0.8687730 -2.3885440 + 0.4178450 0.0002435774 0.0008812836 0.4515562 -0.3073539 0.02114597 2.3294070 + 0.0957610 -8.796617E-05 -0.0007605536 0.0301191 0.2544054 2.2754980 0.9918252 + 0.0513510 7.878246E-05 0.0006340116 -0.0132948 0.5981590 -1.1907700 -3.5072400 +Sc S + 0.0238780 1.0000000 +Sc S + 1.110000E-02 1.0000000 +Sc P + 10592.1900000 0.0000450 -0.0000150 -0.0000040 0.0000040 0.0000090 + 2507.5330000 0.0004010 -0.0001310 -0.0000320 0.0000390 0.0000740 + 814.4571000 0.0023020 -0.0007570 -0.0001850 0.0002210 0.0004790 + 311.5195000 0.0100370 -0.0033180 -0.0008080 0.0009840 0.0018690 + 131.9617000 0.0349540 -0.0117060 -0.0028700 0.0034230 0.0074240 + 59.9871800 0.0979090 -0.0336040 -0.0082070 0.0099930 0.0187630 + 28.6625000 0.2106800 -0.0748790 -0.0184730 0.0219160 0.0487170 + 14.1085100 0.3300930 -0.1225480 -0.0301010 0.0370080 0.0654400 + 7.1037060 0.3310270 -0.1302760 -0.0329430 0.0377940 0.1079480 + 3.6092000 0.1579600 0.0145960 0.0079580 -0.0043790 -0.0587130 + 1.7760700 0.0220990 0.3091840 0.0879930 -0.1101640 -0.1703060 + 0.8547600 -0.0016050 0.4629980 0.1523770 -0.1610170 -0.7549770 + 0.4022390 -0.0013260 0.3049570 0.0971700 -0.1824820 0.6201170 + 0.1546650 -0.0002800 0.0508780 -0.2569380 0.3886110 1.1675480 + 0.0649450 0.0000340 -0.0044930 -0.5878150 0.6911000 -1.0095310 +Sc P + 0.0263590 1.0000000 +Sc P + 1.066000E-02 1.0000000 +Sc D + 50.5138000 0.0042660 -0.0043890 0.0058590 + 14.7405000 0.0277080 -0.0283630 0.0373230 + 5.1950000 0.1000010 -0.1051370 0.1419240 + 2.0284600 0.2315810 -0.2348540 0.3068960 + 0.8040860 0.3460330 -0.3246090 0.3081890 + 0.3076890 0.3733740 -0.0642890 -0.7607170 + 0.1113920 0.2642880 0.6017490 -0.2047750 +Sc D + 0.0373520 1.0000000 +Sc D + 1.244000E-02 1.0000000 +Sc F + 0.7267000 1.0000000 +Sc F + 0.1665000 1.0000000 +Sc F + 4.063000E-02 1.0000000 +Sc G + 0.4187000 1.0000000 +Sc G + 9.473000E-02 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Ti S + 3014643.0000000 8.060782E-06 -4.630486E-06 9.230559E-07 -2.180323E-07 -3.975126E-07 -6.302483E-07 + 451432.9000000 6.267518E-05 -3.600451E-05 7.178974E-06 -1.69486E-06 -3.16108E-06 -5.084585E-06 + 102733.8000000 0.0003295006 -0.000189342 3.775134E-05 -8.919208E-06 -1.609375E-05 -2.534482E-05 + 29098.1700000 0.001389203 -0.0007988781 0.0001594532 -3.763633E-05 -7.092947E-05 -0.000114826 + 9492.3300000 0.005028469 -0.002898698 0.000579515 -0.0001369575 -0.000244271 -0.0003817497 + 3426.3460000 0.01610419 -0.009339701 0.001878414 -0.0004432894 -0.0008457892 -0.001379645 + 1335.8960000 0.04581232 -0.02697464 0.005492747 -0.001298868 -0.002282208 -0.003531666 + 553.5026000 0.1128613 -0.06878913 0.01443297 -0.003406752 -0.006619873 -0.01092225 + 240.6925000 0.2248193 -0.1481037 0.03296408 -0.007810829 -0.01335024 -0.02029554 + 108.7293000 0.3114571 -0.2445253 0.06125493 -0.01449245 -0.0295583 -0.05024404 + 50.2645700 0.2224995 -0.2419916 0.07134113 -0.01708136 -0.02477039 -0.03316309 + 22.5800400 0.07293128 0.0318379 -0.0197315 0.004897666 -0.008414624 -0.03098063 + 10.7143200 0.1160683 0.4932686 -0.2741869 0.06753108 0.1693855 0.3244673 + 5.0935460 0.1194774 0.4939655 -0.4440977 0.1173318 0.1500787 0.2155689 + 2.2441830 0.02097868 0.09196313 0.07776084 -0.02985025 0.09787777 0.1499616 + 1.0595700 -0.0005091715 -0.005316992 0.7068444 -0.2277634 -0.9653608 -2.4207410 + 0.4688490 0.0002217859 0.0008085624 0.4413892 -0.2928115 0.1489721 2.5308740 + 0.1061430 -7.636896E-05 -0.0006918459 0.02799769 0.2665300 2.1911790 0.3423600 + 0.0552620 7.719539E-05 0.0006086512 -0.0121079 0.5912406 -1.2433250 -2.7337220 +Ti S + 0.0254650 1.0000000 +Ti S + 0.0117300 1.0000000 +Ti P + 11912.0300000 0.0000440 -0.0000150 0.0000040 0.0000040 0.0000090 + 2819.9470000 0.0003910 -0.0001310 0.0000310 0.0000390 0.0000730 + 915.9479000 0.0022480 -0.0007550 0.0001820 0.0002230 0.0004680 + 350.3842000 0.0098230 -0.0033190 0.0007950 0.0009920 0.0018560 + 148.4825000 0.0343380 -0.0117500 0.0028330 0.0034760 0.0072930 + 67.5394400 0.0966660 -0.0339220 0.0081540 0.0101720 0.0188560 + 32.3033200 0.2094170 -0.0761640 0.0184720 0.0225760 0.0484050 + 15.9278600 0.3301890 -0.1257020 0.0304000 0.0382380 0.0673780 + 8.0380350 0.3319360 -0.1330980 0.0330470 0.0393370 0.1045410 + 4.0939160 0.1584880 0.0174060 -0.0082510 -0.0061060 -0.0537600 + 2.0223900 0.0223100 0.3151650 -0.0885540 -0.1129620 -0.1917490 + 0.9761020 -0.0015660 0.4618140 -0.1496120 -0.1681140 -0.6947200 + 0.4595950 -0.0013240 0.2998560 -0.0942270 -0.1659320 0.5601620 + 0.1771520 -0.0002710 0.0500000 0.2508460 0.3914030 1.1813360 + 0.0735170 0.0000320 -0.0042300 0.5866430 0.6818400 -0.9932720 +Ti P + 0.0294010 1.0000000 +Ti P + 0.0117600 1.0000000 +Ti D + 64.0130000 0.0038870 -0.0039700 0.0064180 + 18.8179000 0.0263990 -0.0268730 0.0438090 + 6.7287000 0.0975110 -0.1022750 0.1723250 + 2.6641300 0.2328480 -0.2377280 0.3753320 + 1.0786800 0.3531520 -0.3121140 0.2249470 + 0.4232090 0.3721860 -0.0423780 -0.7919070 + 0.1559990 0.2476720 0.5886580 -0.1044280 +Ti D + 0.0518840 1.0000000 +Ti D + 0.0172600 1.0000000 +Ti F + 1.2483000 1.0000000 +Ti F + 0.2836000 1.0000000 +Ti F + 0.0826600 1.0000000 +Ti G + 0.7251000 1.0000000 +Ti G + 0.2114800 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +V S + 3321857.0000000 8.039999E-06 -4.503003E-06 9.320648E-07 -2.158944E-07 -4.093416E-07 -6.539963E-07 + 497435.6000000 6.251402E-05 -3.501295E-05 7.249306E-06 -1.678519E-06 -3.258956E-06 -5.267399E-06 + 113202.7000000 0.0003286553 -0.0001841339 3.811967E-05 -8.831213E-06 -1.65639E-05 -2.632092E-05 + 32063.3300000 0.001385697 -0.0007769216 0.0001610238 -3.727769E-05 -7.316689E-05 -0.0001188719 + 10459.6200000 0.005016217 -0.002819505 0.000585221 -0.0001356099 -0.0002512784 -0.0003968552 + 3775.5060000 0.01606931 -0.009087486 0.001897502 -0.0004392351 -0.0008732657 -0.00142746 + 1472.0400000 0.04574242 -0.02627134 0.005550909 -0.001286948 -0.002347654 -0.003679181 + 609.9331000 0.1128544 -0.06712726 0.01460584 -0.003382149 -0.00685315 -0.01130774 + 265.2634000 0.2254344 -0.1451130 0.03342974 -0.007765646 -0.0137642 -0.02128221 + 119.8607000 0.3140461 -0.2412483 0.06235722 -0.01447985 -0.03084679 -0.05218271 + 55.4489100 0.2267819 -0.2416314 0.07312435 -0.01715502 -0.02562208 -0.03599014 + 24.9837200 0.07334069 0.03067362 -0.01911472 0.004610101 -0.01005123 -0.03088759 + 11.8805600 0.1102474 0.4970415 -0.2817249 0.06827831 0.1795330 0.3380657 + 5.6603110 0.1131358 0.4958875 -0.4488151 0.1161368 0.1522400 0.2389559 + 2.4957030 0.01971295 0.09181868 0.09202696 -0.03277049 0.09483887 0.07609068 + 1.1778660 -0.0004719088 -0.005392514 0.7110117 -0.2280000 -1.0148760 -2.4081130 + 0.5200440 0.0001861606 0.000710238 0.4309274 -0.2793991 0.2308810 2.6335920 + 0.1159650 -6.208598E-05 -0.0006363128 0.02604589 0.2771165 2.1133210 -0.0535851 + 0.0589380 7.295314E-05 0.0005979932 -0.01101049 0.5852999 -1.2530480 -2.2301350 +V S + 0.0269460 1.0000000 +V S + 0.0123200 1.0000000 +V P + 13273.2000000 0.0000430 -0.0000150 0.0000040 0.0000040 0.0000090 + 3142.1260000 0.0003840 -0.0001310 0.0000320 0.0000390 0.0000750 + 1020.5880000 0.0022100 -0.0007550 0.0001830 0.0002230 0.0004790 + 390.4407000 0.0096780 -0.0033250 0.0008020 0.0009960 0.0019060 + 165.5043000 0.0339360 -0.0118110 0.0028620 0.0034980 0.0075120 + 75.3200600 0.0959170 -0.0342560 0.0082870 0.0102960 0.0195300 + 36.0550300 0.2088530 -0.0773630 0.0188700 0.0229620 0.0504020 + 17.8043600 0.3306600 -0.1284560 0.0313070 0.0392080 0.0706850 + 9.0029290 0.3323120 -0.1350780 0.0336600 0.0399430 0.1087750 + 4.5945440 0.1581880 0.0208380 -0.0094790 -0.0071210 -0.0585360 + 2.2767600 0.0222520 0.3204990 -0.0923130 -0.1162250 -0.2154480 + 1.1011780 -0.0015650 0.4602600 -0.1489890 -0.1694960 -0.6773420 + 0.5186380 -0.0013530 0.2953460 -0.0836440 -0.1553740 0.5859790 + 0.2005650 -0.0002650 0.0490460 0.2493390 0.3950220 1.1291080 + 0.0812910 0.0000290 -0.0038240 0.5805150 0.6789080 -0.9740510 +V P + 0.0317950 1.0000000 +V P + 0.0124400 1.0000000 +V D + 77.6115000 0.0035950 -0.0038180 0.0060010 + 22.9159000 0.0252100 -0.0267170 0.0422060 + 8.2795400 0.0947860 -0.1036900 0.1707510 + 3.3099300 0.2303630 -0.2476890 0.3855180 + 1.3586300 0.3528940 -0.3115230 0.2062040 + 0.5413500 0.3704140 -0.0228270 -0.7786690 + 0.2023560 0.2457180 0.5697260 -0.1147210 +V D + 0.0675680 1.0000000 +V D + 0.0225600 1.0000000 +V F + 1.7749000 1.0000000 +V F + 0.4125000 1.0000000 +V F + 0.1311200 1.0000000 +V G + 1.1368000 1.0000000 +V G + 0.3846500 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Cr S + 6177194.0000000 4.128667E-06 -2.301772E-06 4.862957E-07 -1.102451E-07 2.179893E-07 -3.669010E-07 + 924929.5000000 3.210767E-05 -1.789536E-05 3.776645E-06 -8.530233E-07 1.61294E-06 -2.768353E-06 + 210486.5000000 0.0001688416 -9.416174E-05 1.990664E-05 -4.520358E-06 9.111842E-06 -1.521014E-05 + 59620.0500000 0.000712852 -0.0003975074 8.389164E-05 -1.891612E-05 3.500645E-05 -6.066288E-05 + 19450.7600000 0.002589325 -0.001447025 0.0003065706 -6.974344E-05 0.0001435315 -0.0002374959 + 7022.0560000 0.00837735 -0.004694622 0.0009944107 -0.0002237867 0.0004035896 -0.0007077071 + 2738.7630000 0.02441725 -0.01382387 0.002961959 -0.0006754503 0.001425177 -0.002334389 + 1135.8140000 0.06365135 -0.03674643 0.007969473 -0.001789346 0.003114009 -0.005555062 + 495.0923000 0.1427618 -0.08647185 0.01955017 -0.004477858 0.009814449 -0.01585142 + 224.7487000 0.2541275 -0.1696735 0.04085035 -0.009140144 0.01474698 -0.02737888 + 105.3836000 0.3009512 -0.2507089 0.06929003 -0.01610562 0.03911512 -0.06106975 + 50.1935900 0.1766513 -0.1961156 0.06146984 -0.0133487 0.009170888 -0.02887227 + 22.2495700 0.06936709 0.1457244 -0.06981302 0.01426027 0.01559878 0.006813714 + 10.9826500 0.1179579 0.5466706 -0.3517597 0.0893169 -0.2816844 0.4327670 + 5.3836650 0.08916187 0.3979434 -0.3828629 0.08885279 -0.006895261 0.1968410 + 2.3436850 0.0110363 0.05277007 0.2676401 -0.06368776 -0.1769781 -0.3764657 + 1.1052020 -0.0003546048 -0.004374537 0.7175950 -0.2783262 1.4430610 -2.0524730 + 0.4878480 0.0001057311 0.0003204035 0.3020814 -0.1830071 -1.0293180 2.9757410 + 0.0895990 1.11464E-05 -5.142077E-05 0.007749514 0.6790937 -1.3076670 -2.2117050 +Cr S + 0.0334230 1.0000000 +Cr S + 0.0124700 1.0000000 +Cr P + 14454.2000000 0.0000440 -0.0000150 0.0000040 0.0000040 0.0000100 + 3421.6760000 0.0003890 -0.0001350 0.0000320 0.0000400 0.0000790 + 1111.3870000 0.0022410 -0.0007770 0.0001850 0.0002290 0.0005120 + 425.1918000 0.0098210 -0.0034270 0.0008100 0.0010190 0.0020230 + 180.2623000 0.0344710 -0.0121890 0.0029060 0.0036020 0.0080550 + 82.0611700 0.0974600 -0.0353880 0.0083910 0.0105500 0.0207720 + 39.2972600 0.2119850 -0.0799150 0.0191930 0.0237020 0.0542240 + 19.4195900 0.3339900 -0.1323350 0.0315640 0.0399880 0.0746850 + 9.8288990 0.3301370 -0.1354010 0.0334170 0.0404370 0.1159890 + 5.0168100 0.1522270 0.0320080 -0.0129070 -0.0120740 -0.0765840 + 2.4870910 0.0204250 0.3338490 -0.0936590 -0.1189390 -0.2439310 + 1.1987800 -0.0013600 0.4617730 -0.1499770 -0.1781000 -0.6801810 + 0.5586950 -0.0011950 0.2812900 -0.0672340 -0.1238650 0.7336640 + 0.2089240 -0.0001970 0.0418430 0.2707590 0.4297220 0.9991200 + 0.0846080 0.0000230 -0.0040020 0.5758070 0.6507860 -1.0170810 +Cr P + 0.0332580 1.0000000 +Cr P + 0.0130700 1.0000000 +Cr D + 88.5768000 0.0036210 -0.0041220 0.0059540 + 26.2045000 0.0257660 -0.0293070 0.0425320 + 9.5174700 0.0975560 -0.1150620 0.1745110 + 3.8224800 0.2363120 -0.2730680 0.3939000 + 1.5751200 0.3582860 -0.3144230 0.1492790 + 0.6289280 0.3685430 0.0420970 -0.8102450 + 0.2344240 0.2354940 0.5914030 0.0109110 +Cr D + 0.0768150 1.0000000 +Cr D + 0.0251700 1.0000000 +Cr F + 2.2510000 1.0000000 +Cr F + 0.5315000 1.0000000 +Cr F + 0.1763600 1.0000000 +Cr G + 1.4459000 1.0000000 +Cr G + 0.5132900 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Mn S + 3960805.0000000 8.242127E-06 -3.936095E-06 9.462709E-07 -2.095391E-07 -4.121231E-07 -6.805493E-07 + 593115.5000000 6.408587E-05 -3.060481E-05 7.360584E-06 -1.629439E-06 -3.282099E-06 -5.460516E-06 + 134976.8000000 0.0003369253 -0.0001609626 3.869935E-05 -8.570592E-06 -1.667433E-05 -2.743893E-05 + 38230.6700000 0.001420648 -0.0006792348 0.000163511 -3.619272E-05 -7.369999E-05 -0.0001230291 + 12471.5400000 0.005143683 -0.002466182 0.0005941775 -0.0001316146 -0.0002529495 -0.0004146269 + 4501.7430000 0.01648569 -0.007957629 0.001927737 -0.000426681 -0.0008801425 -0.001475151 + 1755.2120000 0.0469856 -0.02307248 0.005641731 -0.00125027 -0.002365482 -0.00385914 + 727.3039000 0.1162437 -0.05932956 0.01487848 -0.003294665 -0.006926354 -0.01168405 + 316.3678000 0.2335277 -0.1299451 0.03414783 -0.00758186 -0.01393851 -0.02257185 + 143.0098000 0.3292837 -0.2212352 0.06405794 -0.01422864 -0.0314384 -0.05399759 + 66.2180500 0.2440304 -0.2292550 0.07557659 -0.01693796 -0.02625749 -0.04032351 + 29.9189600 0.07219806 0.03580733 -0.0194607 0.004454298 -0.01048313 -0.02742526 + 14.3031800 0.07687806 0.5107602 -0.2957874 0.06867042 0.1856472 0.3485593 + 6.8394510 0.07852235 0.5008307 -0.4521170 0.1113335 0.1524839 0.2757818 + 3.0123740 0.01294109 0.0901183 0.1224531 -0.0390082 0.07411368 -0.05499812 + 1.4188080 -0.0003784873 -0.006909909 0.7169756 -0.2215755 -1.0180970 -2.2925450 + 0.6236240 -2.503203E-05 -0.0001912925 0.4092712 -0.2544359 0.2980372 2.6356440 + 0.1340980 -2.421517E-05 -0.0006032312 0.02221969 0.2865866 1.9719890 -0.3379113 + 0.0655480 3.462071E-05 0.0005621608 -0.009011202 0.5755741 -1.1792530 -1.7896070 +Mn S + 0.0295840 1.0000000 +Mn S + 0.0133500 1.0000000 +Mn P + 16205.8600000 0.0000420 -0.0000150 0.0000030 0.0000040 0.0000100 + 3836.2740000 0.0003730 -0.0001290 0.0000300 0.0000400 0.0000810 + 1246.0480000 0.0021490 -0.0007480 0.0001720 0.0002260 0.0005120 + 476.7535000 0.0094450 -0.0033080 0.0007620 0.0010130 0.0020710 + 202.1895000 0.0332970 -0.0118110 0.0027260 0.0035750 0.0081110 + 92.0948700 0.0947590 -0.0345330 0.0079760 0.0106120 0.0215570 + 44.1472000 0.2081440 -0.0787850 0.0182870 0.0239020 0.0553160 + 21.8546800 0.3318050 -0.1321830 0.0307760 0.0412790 0.0802630 + 11.0859600 0.3331750 -0.1371950 0.0323730 0.0414750 0.1177300 + 5.6741080 0.1576010 0.0270750 -0.0099780 -0.0094580 -0.0650690 + 2.8231700 0.0214450 0.3288910 -0.0905290 -0.1236950 -0.2829140 + 1.3686210 -0.0025580 0.4572800 -0.1380040 -0.1743920 -0.6491660 + 0.6444310 -0.0020270 0.2889080 -0.0779650 -0.1291700 0.6925670 + 0.2483820 -0.0003600 0.0474330 0.2295600 0.4003480 0.9789900 + 0.0972550 0.0000340 -0.0035220 0.5761220 0.6696460 -0.9213570 +Mn P + 0.0366330 1.0000000 +Mn P + 0.0138000 1.0000000 +Mn D + 100.6630000 0.0035790 -0.0034540 0.0056850 + 29.8336000 0.0258270 -0.0249250 0.0411710 + 10.8894000 0.0985590 -0.0976350 0.1693220 + 4.3935800 0.2383270 -0.2366920 0.3859120 + 1.8178200 0.3587070 -0.2923500 0.1869090 + 0.7278270 0.3650920 -0.0049730 -0.6781130 + 0.2712950 0.2337380 0.5065880 -0.2582600 +Mn D + 0.0883090 1.0000000 +Mn D + 0.0287500 1.0000000 +Mn F + 2.7382000 1.0000000 +Mn F + 0.6543000 1.0000000 +Mn F + 0.2226000 1.0000000 +Mn G + 1.7335000 1.0000000 +Mn G + 0.6321300 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Fe S + 4316265.0000000 8.048803E-06 -4.155954E-06 9.532178E-07 -2.063008E-07 -4.009367E-07 -6.966042E-07 + 646342.4000000 6.258306E-05 -3.231401E-05 7.414605E-06 -1.604169E-06 -3.189255E-06 -5.568036E-06 + 147089.7000000 0.0003290239 -0.0001699525 3.898393E-05 -8.438437E-06 -1.623079E-05 -2.813684E-05 + 41661.5200000 0.001387355 -0.0007171369 0.0001647152 -3.563151E-05 -7.15792E-05 -0.0001252418 + 13590.7700000 0.005023256 -0.002603625 0.000598598 -0.0001295998 -0.0002463958 -0.0004260787 + 4905.7500000 0.0161014 -0.008399109 0.00194239 -0.0004201534 -0.0008544907 -0.00149906 + 1912.7460000 0.04590034 -0.02434109 0.005687237 -0.001231954 -0.002307593 -0.003979103 + 792.6043000 0.1136154 -0.06251948 0.01501329 -0.003248922 -0.006728292 -0.01185686 + 344.8065000 0.2283869 -0.1365929 0.03452455 -0.007493717 -0.01366165 -0.02346734 + 155.8999000 0.3221159 -0.2312707 0.0649582 -0.01410102 -0.0306224 -0.05467736 + 72.2309100 0.2383661 -0.2383734 0.07716194 -0.0169160 -0.02631137 -0.0439382 + 32.7250600 0.07404667 0.03123837 -0.01873411 0.004218996 -0.009760183 -0.02376103 + 15.6676200 0.09214197 0.5086818 -0.3009185 0.0683381 0.1801906 0.3435928 + 7.5034830 0.0933979 0.4987695 -0.4554661 0.1098201 0.1529634 0.3192960 + 3.3122230 0.01573965 0.09033552 0.1286463 -0.04009005 0.05505413 -0.1343207 + 1.5584710 -0.0004186682 -0.006005337 0.7183316 -0.2174739 -0.9551364 -2.2210200 + 0.6839140 5.376318E-05 0.0002312454 0.4051743 -0.2465135 0.2586813 2.5711420 + 0.1467570 -3.816654E-05 -0.000564368 0.02168227 0.2731435 1.8340490 -0.2292404 + 0.0705830 4.319603E-05 0.000499226 -0.008343566 0.5748321 -0.9333240 -1.8324520 +Fe S + 0.0314490 1.0000000 +Fe S + 0.0140100 1.0000000 +Fe P + 17745.6900000 0.0000410 -0.0000150 0.0000030 0.0000050 0.0000110 + 4200.7210000 0.0003690 -0.0001300 0.0000290 0.0000420 0.0000870 + 1364.4290000 0.0021290 -0.0007510 0.0001650 0.0002410 0.0005410 + 522.0806000 0.0093690 -0.0033290 0.0007340 0.0010850 0.0022260 + 221.4595000 0.0330970 -0.0119120 0.0026260 0.0038310 0.0085930 + 100.9096000 0.0944310 -0.0349330 0.0077250 0.0114230 0.0233390 + 48.4011500 0.2080770 -0.0799890 0.0177330 0.0257920 0.0588440 + 23.9853600 0.3323330 -0.1346360 0.0300550 0.0448180 0.0882890 + 12.1825000 0.3329870 -0.1385980 0.0310940 0.0445980 0.1231920 + 6.2422980 0.1568430 0.0302780 -0.0100480 -0.0111770 -0.0631860 + 3.1109440 0.0215490 0.3332160 -0.0883060 -0.1381340 -0.3549020 + 1.5099580 -0.0020950 0.4561530 -0.1298240 -0.1882850 -0.6197080 + 0.7108450 -0.0017390 0.2850510 -0.0769370 -0.1073990 0.8129860 + 0.2731900 -0.0003000 0.0461440 0.2126610 0.4448630 0.8191180 + 0.1042330 0.0000290 -0.0032490 0.5730610 0.6402390 -0.9017050 +Fe P + 0.0382910 1.0000000 +Fe P + 0.0140700 1.0000000 +Fe D + 113.3440000 0.0035300 -0.0038900 0.0056950 + 33.6414000 0.0257840 -0.0284420 0.0420010 + 12.3310000 0.0991190 -0.1124290 0.1735400 + 4.9947800 0.2390730 -0.2742570 0.4101570 + 2.0728000 0.3571990 -0.3155460 0.1132520 + 0.8307530 0.3621880 0.0571090 -0.7696800 + 0.3091780 0.2364610 0.5636040 -0.0316430 +Fe D + 0.1001300 1.0000000 +Fe D + 0.0324300 1.0000000 +Fe F + 3.2758000 1.0000000 +Fe F + 0.7920000 1.0000000 +Fe F + 0.2749000 1.0000000 +Fe G + 2.0897000 1.0000000 +Fe G + 0.7871600 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Co S + 4675675.0000000 7.979026E-06 -4.20024E-06 9.592692E-07 -2.02884E-07 -3.863053E-07 -7.174687E-07 + 700161.5000000 6.204071E-05 -3.265831E-05 7.461851E-06 -1.57758E-06 -3.068788E-06 -5.722157E-06 + 159337.3000000 0.0003261735 -0.0001717644 3.923137E-05 -8.298813E-06 -1.564826E-05 -2.90097E-05 + 45130.4600000 0.00137536 -0.0007247853 0.0001657706 -3.504154E-05 -6.883588E-05 -0.0001285845 + 14722.3800000 0.004979997 -0.002631462 0.0006024335 -0.0001274655 -0.0002377367 -0.0004398434 + 5314.2220000 0.01596434 -0.008489272 0.001955217 -0.0004132695 -0.0008213173 -0.001537586 + 2072.0180000 0.04552086 -0.02460619 0.005726326 -0.001212261 -0.00222963 -0.004116022 + 858.6188000 0.1127385 -0.06322059 0.01512984 -0.003199318 -0.006467841 -0.01215514 + 373.5497000 0.2268262 -0.1381957 0.03483973 -0.007390972 -0.01325463 -0.02440441 + 168.9229000 0.3203074 -0.2340680 0.06570351 -0.01393649 -0.02946686 -0.05601976 + 78.2963900 0.2374021 -0.2415002 0.07831503 -0.01678575 -0.02599066 -0.04689449 + 35.5212300 0.07477686 0.03035312 -0.01877037 0.004149856 -0.008499807 -0.02168828 + 17.0414400 0.09581872 0.5101341 -0.3062663 0.06797646 0.1727316 0.3477789 + 8.1730000 0.09649911 0.4974939 -0.4566429 0.1075807 0.1512189 0.3500597 + 3.6103180 0.01623362 0.08970746 0.1378169 -0.04166022 0.03554509 -0.2048551 + 1.6970470 -0.0004535497 -0.005941034 0.7193676 -0.2128044 -0.8829353 -2.1632110 + 0.7435320 5.113519E-05 0.0002175362 0.3992579 -0.2381360 0.2143530 2.5240910 + 0.1583440 -4.174508E-05 -0.0005480155 0.02079933 0.2650788 1.7118650 -0.1590011 + 0.0750360 4.027577E-05 0.0004525804 -0.007820663 0.5722774 -0.7140037 -1.8252670 +Co S + 0.0330910 1.0000000 +Co S + 0.0145900 1.0000000 +Co P + 19267.7800000 0.0000410 -0.0000150 -0.0000030 0.0000050 0.0000110 + 4560.9860000 0.0003690 -0.0001310 -0.0000290 0.0000450 0.0000920 + 1481.4360000 0.0021280 -0.0007580 -0.0001670 0.0002550 0.0005630 + 566.8671000 0.0093720 -0.0033630 -0.0007420 0.0011440 0.0023540 + 240.4910000 0.0331550 -0.0120540 -0.0026620 0.0040610 0.0089760 + 109.6105000 0.0947520 -0.0354240 -0.0078410 0.0120950 0.0248100 + 52.5949100 0.2090930 -0.0812870 -0.0180510 0.0274760 0.0615800 + 26.0836100 0.3337220 -0.1369080 -0.0305800 0.0475570 0.0947770 + 13.2614300 0.3322080 -0.1390190 -0.0313120 0.0473020 0.1266930 + 6.7997780 0.1546130 0.0354680 0.0113110 -0.0144180 -0.0637540 + 3.3934140 0.0209020 0.3384980 0.0899900 -0.1500620 -0.4185660 + 1.6487660 -0.0020240 0.4544330 0.1307330 -0.1990920 -0.5678650 + 0.7762820 -0.0016970 0.2797930 0.0718080 -0.0797830 0.8754060 + 0.2980030 -0.0002800 0.0447760 -0.2216580 0.4590350 0.7182630 + 0.1136180 0.0000260 -0.0031510 -0.5710250 0.6174950 -0.8747220 +Co P + 0.0416240 1.0000000 +Co P + 0.0152500 1.0000000 +Co D + 126.2640000 0.0035100 -0.0040670 0.0054700 + 37.5226000 0.0258840 -0.0300530 0.0408130 + 13.8021000 0.1000580 -0.1196200 0.1689780 + 5.6092700 0.2405470 -0.2915130 0.4093590 + 2.3336900 0.3568430 -0.3180480 0.0863160 + 0.9364150 0.3595790 0.0916980 -0.7690080 + 0.3482370 0.2366290 0.5608230 0.0033550 +Co D + 0.1123530 1.0000000 +Co D + 0.0362500 1.0000000 +Co F + 3.8137000 1.0000000 +Co F + 0.9309000 1.0000000 +Co F + 0.3271500 1.0000000 +Co G + 2.4709000 1.0000000 +Co G + 0.9581400 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Ni S + 5045991.0000000 8.208996E-06 -3.657849E-06 9.594149E-07 -2.013753E-07 -3.924245E-07 -7.303633E-07 + 755614.2000000 6.382884E-05 -2.844094E-05 7.462614E-06 -1.565832E-06 -3.113909E-06 -5.802013E-06 + 171956.8000000 0.00033558 -0.0001495928 3.923843E-05 -8.237182E-06 -1.590447E-05 -2.958547E-05 + 48704.7900000 0.001415075 -0.0006313009 0.0001657868 -3.478105E-05 -6.981394E-05 -0.0001301499 + 15888.4100000 0.005124444 -0.002293052 0.0006025905 -0.0001265265 -0.0002417848 -0.0004495332 + 5735.1230000 0.01643256 -0.007405123 0.001955662 -0.0004102589 -0.0008326195 -0.001553314 + 2236.1370000 0.04689398 -0.02152032 0.005730391 -0.001203834 -0.002270294 -0.004219884 + 926.6468000 0.1163534 -0.05560974 0.01514756 -0.003179062 -0.006557427 -0.01225419 + 403.1743000 0.2350511 -0.1230176 0.03493499 -0.007353828 -0.01354288 -0.02519707 + 182.3476000 0.3350184 -0.2130104 0.06598072 -0.01389022 -0.02989768 -0.05621717 + 84.5488500 0.2534779 -0.2265837 0.07893083 -0.01677875 -0.02693106 -0.05022229 + 38.3963400 0.07300901 0.03546796 -0.01906249 0.004163378 -0.007827693 -0.01677412 + 18.4585900 0.06184244 0.5181697 -0.3095921 0.06814703 0.1741667 0.3388021 + 8.8635480 0.06302956 0.5025630 -0.4558610 0.1061029 0.1595468 0.3984975 + 3.9162270 0.01008063 0.08955674 0.1482931 -0.0433998 0.0199555 -0.3032053 + 1.8388700 -0.0002244528 -0.007031311 0.7134039 -0.2094950 -0.8897000 -2.0796190 + 0.8043620 -5.932767E-05 -0.0004339167 0.3976063 -0.2310271 0.2486892 2.5005420 + 0.1697970 -1.158562E-05 -0.0005831711 0.02295523 0.2590532 1.6130120 -0.2169002 + 0.0793060 8.115109E-06 0.0004228788 -0.009151758 0.5691426 -0.5990277 -1.7091780 +Ni S + 0.0346770 1.0000000 +Ni S + 0.0151600 1.0000000 +Ni P + 21027.9200000 0.0000410 -0.0000150 0.0000030 0.0000060 0.0000110 + 4977.5600000 0.0003630 -0.0001290 0.0000260 0.0000530 0.0000950 + 1616.7400000 0.0020970 -0.0007490 0.0001520 0.0003050 0.0005800 + 618.6718000 0.0092500 -0.0033280 0.0006780 0.0013640 0.0024510 + 262.5183000 0.0327960 -0.0119470 0.0024270 0.0048760 0.0092820 + 119.6907000 0.0940040 -0.0352420 0.0072010 0.0145030 0.0260090 + 57.4658500 0.2082800 -0.0812040 0.0165780 0.0332960 0.0640960 + 28.5282900 0.3336540 -0.1374930 0.0283920 0.0574820 0.1007100 + 14.5214800 0.3329040 -0.1392260 0.0285990 0.0587020 0.1325390 + 7.4538500 0.1553720 0.0360160 -0.0101320 -0.0199040 -0.0650890 + 3.7235530 0.0208590 0.3391280 -0.0829120 -0.1946950 -0.4897560 + 1.8098130 -0.0024400 0.4504720 -0.1159980 -0.2396130 -0.4984550 + 0.8513360 -0.0019980 0.2817830 -0.0727950 -0.0022320 0.9663570 + 0.3248140 -0.0003380 0.0478980 0.1956400 0.5214350 0.5283790 + 0.1195220 0.0000350 -0.0029870 0.5670990 0.5455400 -0.8676760 +Ni P + 0.0423660 1.0000000 +Ni P + 0.0150200 1.0000000 +Ni D + 140.2527000 0.0033760 -0.0034950 0.0050520 + 41.7261000 0.0251410 -0.0260150 0.0380870 + 15.3981000 0.0977460 -0.1038760 0.1561130 + 6.2771000 0.2347090 -0.2520700 0.3861560 + 2.6185000 0.3469450 -0.2945800 0.1756050 + 1.0526000 0.3510680 0.0011520 -0.6268070 + 0.3916000 0.2502550 0.4385890 -0.3427750 +Ni D + 0.1262000 1.0000000 +Ni D + 0.0406700 1.0000000 +Ni F + 4.5046000 1.0000000 +Ni F + 1.1286000 1.0000000 +Ni F + 0.4083000 1.0000000 +Ni G + 2.9771000 1.0000000 +Ni G + 1.2048500 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Cu S + 5430321.0000000 7.801026E-06 -4.404706E-06 9.704682E-07 -1.959354E-07 -3.532229E-07 -7.508267E-07 + 813166.5000000 6.065666E-05 -3.424801E-05 7.549245E-06 -1.523472E-06 -2.798812E-06 -5.972018E-06 + 185054.4000000 0.0003188964 -0.0001801238 3.968892E-05 -8.014808E-06 -1.432517E-05 -3.039682E-05 + 52414.6600000 0.001344687 -0.0007600455 0.00016772 -3.383992E-05 -6.270946E-05 -0.0001340405 + 17098.6800000 0.00486905 -0.002759348 0.0006095101 -0.0001231191 -0.000217949 -0.0004615778 + 6171.9940000 0.01561013 -0.00890097 0.001978846 -0.0003992085 -0.0007474316 -0.001601064 + 2406.4810000 0.04452077 -0.02579378 0.005798049 -0.0011719 -0.002049271 -0.004330942 + 997.2584000 0.1103111 -0.06623861 0.01534158 -0.003096141 -0.005885203 -0.01265434 + 433.9289000 0.2220342 -0.1445927 0.03540484 -0.007171993 -0.01226885 -0.02586864 + 196.2869000 0.3133739 -0.2440110 0.06702098 -0.01356621 -0.02683147 -0.05835428 + 91.0428000 0.2315121 -0.2504837 0.08026945 -0.01643989 -0.02479261 -0.05132322 + 41.3842500 0.0764092 0.02852577 -0.01927231 0.004107628 -0.005984746 -0.01908953 + 19.9327800 0.1103818 0.5115874 -0.3160129 0.06693964 0.1557124 0.3586116 + 9.5818910 0.1094372 0.4928061 -0.4573162 0.1028221 0.1436683 0.3885818 + 4.2345160 0.01836311 0.08788437 0.1550841 -0.04422945 0.008374103 -0.3057106 + 1.9858140 -0.0006043084 -0.005820281 0.7202872 -0.2031191 -0.7460711 -2.0698960 + 0.8670830 5.092245E-05 0.0002013508 0.3885122 -0.2230022 0.1244367 2.4317740 + 0.1813390 -5.54073E-05 -0.0005182553 0.01924326 0.2517975 1.5101100 -0.02121974 + 0.0836570 3.969482E-05 0.0003731503 -0.007103807 0.5650091 -0.3477122 -1.8202510 +Cu S + 0.0362670 1.0000000 +Cu S + 0.0157200 1.0000000 +Cu P + 22760.5700000 0.0000400 -0.0000150 0.0000030 0.0000050 0.0000110 + 5387.6790000 0.0003610 -0.0001310 0.0000250 0.0000490 0.0000960 + 1749.9450000 0.0020830 -0.0007550 0.0001470 0.0002780 0.0005900 + 669.6653000 0.0091970 -0.0033590 0.0006560 0.0012530 0.0024840 + 284.1948000 0.0326600 -0.0120810 0.0023510 0.0044470 0.0094630 + 129.6077000 0.0937950 -0.0357030 0.0070040 0.0133700 0.0264530 + 62.2541500 0.2082740 -0.0825020 0.0161310 0.0304690 0.0656890 + 30.9296400 0.3339930 -0.1398900 0.0277700 0.0534470 0.1027320 + 15.7582700 0.3324930 -0.1407290 0.0275670 0.0526390 0.1370410 + 8.0942110 0.1547280 0.0387660 -0.0101150 -0.0168810 -0.0709610 + 4.0469210 0.0212710 0.3426950 -0.0810090 -0.1794480 -0.5047080 + 1.9678690 -0.0016900 0.4523100 -0.1104090 -0.2095880 -0.4780560 + 0.9252950 -0.0015160 0.2770540 -0.0717320 -0.0396330 0.9428920 + 0.3529920 -0.0002420 0.0438850 0.1879300 0.5021300 0.5446990 + 0.1273070 0.0000230 -0.0028020 0.5646290 0.5811110 -0.8327660 +Cu P + 0.0443560 1.0000000 +Cu P + 0.0154500 1.0000000 +Cu D + 173.8970000 0.0027000 -0.0033630 0.0041330 + 51.8869000 0.0209090 -0.0260790 0.0330850 + 19.3419000 0.0844080 -0.1082310 0.1383360 + 7.9757200 0.2139990 -0.2822170 0.3901660 + 3.3982300 0.3359800 -0.3471900 0.1698420 + 1.4093200 0.3573010 0.0267110 -0.6830180 + 0.5488580 0.2645780 0.4920470 -0.2657970 +Cu D + 0.1901990 1.0000000 +Cu D + 0.0659100 1.0000000 +Cu F + 5.0821000 1.0000000 +Cu F + 1.2797000 1.0000000 +Cu F + 0.4617200 1.0000000 +Cu G + 3.4835000 1.0000000 +Cu G + 1.4597900 1.0000000 +#BASIS SET: (21s,17p,9d,3f,2g) -> [8s,7p,5d,3f,2g] +Zn S + 5820021.0000000 8.549241E-06 -2.640069E-06 9.967103E-07 1.995818E-07 -5.43591E-07 8.040791E-07 + 871523.4000000 6.64741E-05 -2.05272E-05 7.754163E-06 1.552973E-06 -4.336894E-06 6.282936E-06 + 198335.0000000 0.0003494962 -0.0001079859 4.076019E-05 8.161259E-06 -2.197572E-05 3.281868E-05 + 56176.3100000 0.001473832 -0.0004558577 0.0001722811 3.450747E-05 -9.747392E-05 0.0001398858 + 18325.8200000 0.00533833 -0.001657758 0.000625937 0.0001253275 -0.0003331615 0.0005029836 + 6614.9550000 0.01712708 -0.005368492 0.002032855 0.000407299 -0.001166192 0.001655419 + 2579.1990000 0.04894085 -0.01571249 0.005954646 0.001192734 -0.003119308 0.004778677 + 1068.8490000 0.1217934 -0.04122558 0.0157664 0.00316314 -0.009239504 0.01292479 + 465.1045000 0.2476589 -0.09406459 0.03637638 0.007303942 -0.01855471 0.02925831 + 210.4130000 0.3582431 -0.1719954 0.06892343 0.01391279 -0.04281189 0.05791816 + 97.6162900 0.2798174 -0.1958523 0.08238093 0.0167062 -0.03571095 0.06640681 + 44.3802000 0.06857491 0.04532907 -0.0201136 -0.004035586 -0.0163835 -0.007388966 + 21.4230800 -0.001311092 0.5244442 -0.3252526 -0.06968861 0.2644664 -0.3329989 + 10.3089100 0.001914001 0.5006142 -0.4602899 -0.1030105 0.2086588 -0.5917865 + 4.5536450 -0.000875922 0.08945527 0.1635546 0.04471442 -0.01774382 0.9011406 + 2.1328210 0.0003740096 -0.002146262 0.7297118 0.2150027 -1.3538730 1.5859510 + 0.9296970 -0.0001401399 0.002112113 0.3769751 0.2220163 0.8182926 -2.7880080 + 0.1921470 4.757132E-05 -0.000413398 0.01433224 -0.3114776 1.6950360 2.0718840 + 0.0875950 -3.642711E-05 0.0003209752 -0.00667121 -0.5693429 -1.3886560 -0.6012025 +Zn S + 0.0377020 1.0000000 +Zn S + 0.0162300 1.0000000 +Zn P + 24411.9800000 0.0000410 -0.0000150 0.0000030 0.0000050 0.0000120 + 5778.5180000 0.0003610 -0.0001350 0.0000250 0.0000420 0.0000960 + 1876.8620000 0.0020880 -0.0007820 0.0001440 0.0002380 0.0005940 + 718.2361000 0.0092210 -0.0034780 0.0006450 0.0010880 0.0024840 + 304.8327000 0.0327730 -0.0125200 0.0023110 0.0038210 0.0095370 + 139.0453000 0.0941790 -0.0370160 0.0068980 0.0116440 0.0264790 + 66.8041700 0.2091320 -0.0855590 0.0158820 0.0261670 0.0663660 + 33.2069900 0.3345690 -0.1447180 0.0273500 0.0467500 0.1024580 + 16.9281600 0.3303590 -0.1434420 0.0266210 0.0433090 0.1386830 + 8.6962290 0.1523470 0.0435950 -0.0108580 -0.0134290 -0.0801400 + 4.3505100 0.0229840 0.3488880 -0.0798530 -0.1538970 -0.4960690 + 2.1165230 0.0016070 0.4538650 -0.1061270 -0.1674130 -0.4635100 + 0.9953870 0.0004680 0.2685940 -0.0688830 -0.0849950 0.8745310 + 0.3781120 0.0000660 0.0388680 0.1843850 0.4508130 0.6297900 + 0.1345790 -0.0000020 -0.0024920 0.5617880 0.6408690 -0.8116860 +Zn P + 0.0462820 1.0000000 +Zn P + 0.0159200 1.0000000 +Zn D + 205.6177000 0.0023420 0.0032790 0.0037400 + 61.4498100 0.0186060 0.0261760 0.0318250 + 23.0568900 0.0771020 0.1113670 0.1322290 + 9.5777390 0.2020260 0.3045810 0.4245500 + 4.1337340 0.3294540 0.3862990 0.1203700 + 1.7475180 0.3609760 -0.0583750 -0.7626610 + 0.6995600 0.2716570 -0.5388760 -0.1128230 +Zn D + 0.2516080 1.0000000 +Zn D + 0.0904900 1.0000000 +Zn F + 5.7922000 1.0000000 +Zn F + 1.4851000 1.0000000 +Zn F + 0.5486100 1.0000000 +Zn G + 4.1144000 1.0000000 +Zn G + 1.8293300 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +Ga S + 6558157.3000000 0.0000080 -0.0000025 0.0000009 0.0000002 + 982025.3400000 0.0000622 -0.0000193 0.0000074 0.0000017 + 223467.6900000 0.0003270 -0.0001014 0.0000387 0.0000090 + 63288.2910000 0.0013794 -0.0004281 0.0001633 0.0000380 + 20642.9400000 0.0049993 -0.0015582 0.0005944 0.0001382 + 7450.5224000 0.0160605 -0.0050469 0.0019292 0.0004489 + 2905.0744000 0.0460124 -0.0148056 0.0056689 0.0013188 + 1204.2100000 0.1152224 -0.0389482 0.0150282 0.0035016 + 524.3045400 0.2373921 -0.0896832 0.0350222 0.0081673 + 237.4656300 0.3531989 -0.1664076 0.0671135 0.0157338 + 110.5786600 0.2915500 -0.2004010 0.0850156 0.0200284 + 51.3746240 0.0812129 0.0114943 -0.0047212 -0.0010136 + 24.4408460 0.0007655 0.4958134 -0.3016737 -0.0750162 + 11.7685910 0.0016124 0.5295550 -0.4825489 -0.1257980 + 5.3421190 -0.0007530 0.1110185 0.0891695 0.0300857 + 2.4950360 0.0003134 -0.0007000 0.7287830 0.2488169 + 1.0987730 -0.0001306 0.0022283 0.4288542 0.2843706 + 0.2601800 0.0000513 -0.0005014 0.0207249 -0.3110594 +Ga S + 0.1270790 1.0000000 +Ga S + 0.0544080 1.0000000 +Ga S + 0.0143980 1.0000000 +Ga P + 8050.1674000 0.0003169 -0.0001203 0.0000200 + 1907.5361000 0.0027648 -0.0010492 0.0001689 + 618.6274600 0.0151204 -0.0058102 0.0009668 + 235.3241700 0.0599583 -0.0234345 0.0037797 + 98.8996460 0.1733120 -0.0708270 0.0119082 + 44.2482150 0.3410820 -0.1465511 0.0235693 + 20.6174290 0.3896967 -0.1769660 0.0314233 + 9.7805160 0.1839817 0.0363821 -0.0136188 + 4.4412380 0.0218896 0.4232848 -0.0734003 + 1.9640450 0.0011608 0.4952586 -0.1264785 + 0.8335780 0.0002735 0.1797428 0.0158579 +Ga P + 0.1934450 1.0000000 +Ga P + 0.0561170 1.0000000 +Ga P + 0.0193000 1.0000000 +Ga D + 244.1474100 0.0020270 + 73.0675950 0.0165088 + 27.5920810 0.0703823 + 11.5465180 0.1911430 + 5.0486280 0.3254092 + 2.1784650 0.3678199 + 0.9002530 0.2744685 +Ga D + 0.3373270 1.0000000 +Ga D + 0.1169000 1.0000000 +Ga D + 0.0387000 1.0000000 +Ga F + 0.2881000 1.0000000 +Ga F + 0.0980000 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +Ge S + 7447966.8000000 0.0000074 -0.0000023 0.0000009 -0.0000002 + 1115318.2000000 0.0000574 -0.0000179 0.0000069 -0.0000018 + 253842.6500000 0.0003019 -0.0000940 0.0000362 -0.0000093 + 71915.2850000 0.0012733 -0.0003964 0.0001528 -0.0000392 + 23470.1810000 0.0046123 -0.0014425 0.0005563 -0.0001426 + 8477.4918000 0.0148214 -0.0046675 0.0018018 -0.0004621 + 3308.3908000 0.0425536 -0.0137153 0.0053085 -0.0013614 + 1372.6054000 0.1073055 -0.0361797 0.0140877 -0.0036175 + 598.2200700 0.2245178 -0.0841679 0.0332013 -0.0085359 + 271.3860200 0.3453131 -0.1588767 0.0644621 -0.0166506 + 126.9779500 0.3045261 -0.2033807 0.0869540 -0.0225911 + 60.2220650 0.0990670 -0.0251410 0.0118745 -0.0032147 + 28.0185820 0.0041317 0.4575152 -0.2724534 0.0744998 + 13.5175220 0.0010347 0.5571939 -0.5001452 0.1440333 + 6.3094060 -0.0004856 0.1397055 0.0108554 -0.0080815 + 2.9045340 0.0001805 0.0022645 0.7216469 -0.2704163 + 1.2875560 -0.0000912 0.0020927 0.4805213 -0.3401607 + 0.1677320 -0.0000266 0.0003281 -0.0102297 0.6190657 +Ge S + 0.3365520 1.0000000 +Ge S + 0.0710690 1.0000000 +Ge S + 0.0273700 1.0000000 +Ge P + 6979.5982000 0.0004569 -0.0001756 0.0000348 + 1654.1648000 0.0039562 -0.0015305 0.0003014 + 536.0286500 0.0213143 -0.0083145 0.0016487 + 203.5371300 0.0818715 -0.0328718 0.0064982 + 85.2375300 0.2223732 -0.0931661 0.0186383 + 37.8419620 0.3905659 -0.1755542 0.0350613 + 17.4065120 0.3560415 -0.1467912 0.0295892 + 7.8814920 0.1070312 0.1862934 -0.0472458 + 3.5332130 0.0036941 0.5264862 -0.1249847 + 1.5214730 0.0019219 0.3970859 -0.1210801 + 0.1990930 0.0001917 -0.0033478 0.5754730 +Ge P + 0.5627040 1.0000000 +Ge P + 0.0670310 1.0000000 +Ge P + 0.0213680 1.0000000 +Ge D + 282.2391100 0.0018275 + 84.5499570 0.0151545 + 32.0736560 0.0660460 + 13.4974950 0.1839470 + 5.9585500 0.3227872 + 2.6107880 0.3729459 + 1.1039870 0.2751730 +Ge D + 0.4240490 1.0000000 +Ge D + 0.1520000 1.0000000 +Ge D + 0.0528000 1.0000000 +Ge F + 0.3458000 1.0000000 +Ge F + 0.1323000 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +As S + 8482339.6000000 0.0000068 -0.0000021 0.0000008 -0.0000002 + 1270150.9000000 0.0000528 -0.0000165 0.0000064 -0.0000018 + 289056.9600000 0.0002774 -0.0000866 0.0000337 -0.0000093 + 81879.8490000 0.0011702 -0.0003653 0.0001423 -0.0000392 + 26716.5640000 0.0042421 -0.0013309 0.0005188 -0.0001429 + 9647.5842000 0.0136557 -0.0043093 0.0016802 -0.0004629 + 3764.1195000 0.0393399 -0.0126973 0.0049677 -0.0013687 + 1561.5656000 0.0999292 -0.0336160 0.0132115 -0.0036440 + 680.8146700 0.2121555 -0.0789470 0.0314566 -0.0086884 + 309.2411900 0.3363866 -0.1514458 0.0618446 -0.0171556 + 145.2573600 0.3155125 -0.2042014 0.0879566 -0.0245514 + 69.7390480 0.1181312 -0.0557367 0.0257548 -0.0073524 + 31.7703250 0.0080076 0.4187607 -0.2455459 0.0720087 + 15.3917570 0.0003293 0.5758762 -0.5090572 0.1576254 + 7.3415260 -0.0001523 0.1696842 -0.0555749 0.0142074 + 3.3237160 0.0000247 0.0060662 0.7083796 -0.2851593 + 1.4858670 -0.0000366 0.0017605 0.5231027 -0.3885347 + 0.2115000 -0.0000094 0.0002316 -0.0111176 0.6495337 +As S + 0.4210860 1.0000000 +As S + 0.0889740 1.0000000 +As S + 0.0334070 1.0000000 +As P + 7423.8614000 0.0004599 -0.0001794 0.0000399 + 1759.5166000 0.0039823 -0.0015641 0.0003488 + 570.2291600 0.0214638 -0.0084999 0.0018953 + 216.5799700 0.0824617 -0.0336327 0.0075325 + 90.7342520 0.2238902 -0.0953228 0.0214315 + 40.3087910 0.3920704 -0.1793626 0.0407807 + 18.5555020 0.3542238 -0.1466682 0.0325249 + 8.3965430 0.1048641 0.1966016 -0.0548832 + 3.7673670 0.0033664 0.5372088 -0.1511922 + 1.6297010 0.0018495 0.3857361 -0.1249011 + 0.2225030 0.0002297 -0.0054006 0.5855293 +As P + 0.5682630 1.0000000 +As P + 0.0804050 1.0000000 +As P + 0.0267990 1.0000000 +As D + 321.0196100 0.0016840 + 96.2493050 0.0141586 + 36.6449630 0.0628259 + 15.4939650 0.1784993 + 6.8911380 0.3209452 + 3.0548310 0.3773515 + 1.3142410 0.2750231 +As D + 0.5134300 1.0000000 +As D + 0.1877000 1.0000000 +As D + 0.0700000 1.0000000 +As F + 0.4158000 1.0000000 +As F + 0.1690000 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +Se S + 9563600.0000000 0.0000063 -0.0000020 0.0000008 -0.0000002 + 1432100.0000000 0.0000489 -0.0000153 0.0000060 -0.0000018 + 325910.0000000 0.0002574 -0.0000806 0.0000317 -0.0000093 + 92312.0000000 0.0010861 -0.0003400 0.0001337 -0.0000391 + 30116.0000000 0.0039399 -0.0012397 0.0004883 -0.0001428 + 10872.0000000 0.0127041 -0.0040177 0.0015821 -0.0004627 + 4240.1000000 0.0367156 -0.0118672 0.0046919 -0.0013722 + 1758.4000000 0.0938672 -0.0315340 0.0125098 -0.0036628 + 766.5900000 0.2017677 -0.0746439 0.0300381 -0.0088061 + 348.4300000 0.3280540 -0.1452179 0.0597271 -0.0175867 + 164.0300000 0.3238334 -0.2038441 0.0884696 -0.0262074 + 79.1420000 0.1352337 -0.0788711 0.0363920 -0.0109964 + 35.5240000 0.0117075 0.3845825 -0.2235329 0.0695697 + 17.3050000 -0.0003436 0.5865270 -0.5122462 0.1683947 + 8.3784000 0.0001665 0.1973591 -0.1084224 0.0346160 + 3.7405000 -0.0001188 0.0100102 0.6936372 -0.2978702 + 1.6890000 0.0000204 0.0013160 0.5558711 -0.4322569 + 0.2552000 0.0000083 0.0001109 -0.0113832 0.6757217 +Se S + 0.5092700 1.0000000 +Se S + 0.1065100 1.0000000 +Se S + 0.0392010 1.0000000 +Se P + 8004.3000000 0.0004505 -0.0001783 0.0000430 + 1896.9000000 0.0039049 -0.0015554 0.0003770 + 614.7100000 0.0210901 -0.0084727 0.0020465 + 233.5000000 0.0812920 -0.0336245 0.0081899 + 97.8560000 0.2217841 -0.0958267 0.0233356 + 43.5140000 0.3907270 -0.1813907 0.0449813 + 20.0630000 0.3559714 -0.1503152 0.0357475 + 9.1127000 0.1073272 0.1948263 -0.0586866 + 4.1063000 0.0036985 0.5415554 -0.1709573 + 1.7949000 0.0018032 0.3837299 -0.1293583 + 0.2461500 0.0002208 -0.0050132 0.5778069 +Se P + 0.6243200 1.0000000 +Se P + 0.0889170 1.0000000 +Se P + 0.0302510 1.0000000 +Se D + 361.8500000 0.0015655 + 108.5500000 0.0133262 + 41.4330000 0.0601527 + 17.5790000 0.1740293 + 7.8627000 0.3195690 + 3.5180000 0.3812029 + 1.5348000 0.2746086 +Se D + 0.6081300 1.0000000 +Se D + 0.2220000 1.0000000 +Se D + 0.0837000 1.0000000 +Se F + 0.4620000 1.0000000 +Se F + 0.1880000 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +Br S + 10639000.0000000 0.0000059 -0.0000019 0.0000007 -0.0000002 + 1593400.0000000 0.0000461 -0.0000145 0.0000057 -0.0000018 + 362610.0000000 0.0002422 -0.0000761 0.0000303 -0.0000093 + 102700.0000000 0.0010226 -0.0003210 0.0001275 -0.0000391 + 33501.0000000 0.0037113 -0.0011709 0.0004659 -0.0001428 + 12093.0000000 0.0119785 -0.0037968 0.0015096 -0.0004628 + 4715.9000000 0.0346927 -0.0112307 0.0044852 -0.0013750 + 1955.6000000 0.0891239 -0.0299277 0.0119835 -0.0036784 + 852.6100000 0.1934557 -0.0712706 0.0289571 -0.0088981 + 387.6700000 0.3209019 -0.1403136 0.0581566 -0.0179529 + 182.6800000 0.3299233 -0.2030763 0.0888133 -0.0275732 + 88.2450000 0.1494121 -0.0960985 0.0445244 -0.0140953 + 39.2630000 0.0149938 0.3558086 -0.2060387 0.0672561 + 19.2340000 -0.0009165 0.5921792 -0.5127017 0.1766928 + 9.4057000 0.0004380 0.2215977 -0.1509349 0.0528861 + 4.1601000 -0.0002398 0.0137648 0.6789203 -0.3075955 + 1.8995000 0.0000736 0.0008395 0.5817697 -0.4700658 + 0.3011400 0.0000239 -0.0000085 -0.0111825 0.6980341 +Br S + 0.6047200 1.0000000 +Br S + 0.1251500 1.0000000 +Br S + 0.0455930 1.0000000 +Br P + 8676.5000000 0.0004357 -0.0001748 0.0000451 + 2055.9000000 0.0037815 -0.0015263 0.0003964 + 666.2300000 0.0204782 -0.0083399 0.0021555 + 253.1000000 0.0792834 -0.0332203 0.0086720 + 106.1200000 0.2178473 -0.0954180 0.0248680 + 47.2420000 0.3878585 -0.1824026 0.0485472 + 21.8250000 0.3594350 -0.1558308 0.0396156 + 9.9684000 0.1121995 0.1867899 -0.0605749 + 4.5171000 0.0043874 0.5427733 -0.1871699 + 1.9982000 0.0017809 0.3873309 -0.1377757 + 0.2814500 0.0002122 -0.0043784 0.5760896 +Br P + 0.7098800 1.0000000 +Br P + 0.1020400 1.0000000 +Br P + 0.0351420 1.0000000 +Br D + 403.8300000 0.0014732 + 121.1700000 0.0126725 + 46.3450000 0.0580451 + 19.7210000 0.1705103 + 8.8624000 0.3185958 + 3.9962000 0.3845023 + 1.7636000 0.2737737 +Br D + 0.7061900 1.0000000 +Br D + 0.2639000 1.0000000 +Br D + 0.1047000 1.0000000 +Br F + 0.5515000 1.0000000 +Br F + 0.2580000 1.0000000 +#BASIS SET: (21s,14p,10d,2f) -> [7s,6p,4d,2f] +Kr S + 11718113.0000000 0.0000056 -0.0000018 0.0000007 -0.0000002 + 1754604.4000000 0.0000438 -0.0000138 0.0000055 -0.0000018 + 399281.3200000 0.0002305 -0.0000726 0.0000292 -0.0000093 + 113084.5700000 0.0009733 -0.0003063 0.0001228 -0.0000391 + 36885.9250000 0.0035337 -0.0011177 0.0004491 -0.0001430 + 13312.2090000 0.0114167 -0.0036270 0.0014557 -0.0004639 + 5189.9883000 0.0331325 -0.0107432 0.0043319 -0.0013801 + 2151.6597000 0.0854464 -0.0286992 0.0115965 -0.0037001 + 938.0325100 0.1869124 -0.0686679 0.0281585 -0.0089921 + 426.5573200 0.3149761 -0.1365155 0.0570339 -0.0183021 + 201.0666000 0.3343334 -0.2022458 0.0891356 -0.0287559 + 97.0976050 0.1608810 -0.1090569 0.0508421 -0.0167324 + 42.9987240 0.0178435 0.3318768 -0.1921030 0.0652410 + 21.1770750 -0.0013793 0.5948250 -0.5121040 0.1834422 + 10.4267520 0.0006572 0.2424825 -0.1857007 0.0692183 + 4.5850080 -0.0003388 0.0172241 0.6654119 -0.3156034 + 2.1176030 0.0001211 0.0003685 0.6023925 -0.5031501 + 0.3492250 0.0000366 -0.0001153 -0.0106453 0.7171571 +Kr S + 0.7070570 1.0000000 +Kr S + 0.1448210 1.0000000 +Kr S + 0.0519850 1.0000000 +Kr P + 9366.3090000 0.0004231 -0.0001720 0.0000466 + 2219.5543000 0.0036743 -0.0015025 0.0004100 + 719.4528800 0.0199312 -0.0082269 0.0022328 + 273.4644600 0.0774222 -0.0328566 0.0090144 + 114.7522500 0.2140386 -0.0950135 0.0260115 + 51.1555690 0.3848556 -0.1833106 0.0513340 + 23.6826760 0.3626340 -0.1612161 0.0430929 + 10.8754840 0.1170818 0.1787644 -0.0615040 + 4.9551310 0.0051210 0.5437885 -0.2003424 + 2.2172670 0.0017539 0.3913387 -0.1457364 + 0.3221540 0.0002199 -0.0047800 0.5764581 +Kr P + 0.8064100 1.0000000 +Kr P + 0.1176190 1.0000000 +Kr P + 0.0400330 1.0000000 +Kr D + 446.1613300 0.0014044 + 133.9647700 0.0121715 + 51.3459070 0.0563919 + 21.9169060 0.1676430 + 9.8937250 0.3177368 + 4.4925270 0.3872647 + 2.0022930 0.2728006 +Kr D + 0.8084090 1.0000000 +Kr D + 0.3006000 1.0000000 +Kr D + 0.1257000 1.0000000 +Kr F + 0.6622000 1.0000000 +Kr F + 0.3280000 1.0000000 +END diff --git a/oep-wy/build_matrix.py b/oep-wy/build_matrix.py new file mode 100644 index 0000000..8cfaa17 --- /dev/null +++ b/oep-wy/build_matrix.py @@ -0,0 +1,124 @@ +import numpy +from utility import clean_array + + +einsum = numpy.einsum + + +def build_vbg(b, integrals_3c1e): + """ + vbg_{ij} = \sum_t b_t \int xi_i(r) g_t(r) xi_j(r) dr + vbg_{ij} = \sum_t b_t I_{ijt} + + Args: + b (ndarray): potential coefficients. + integrals_3c1e (ndarray): integral table. + + Returns: + ndarray: vbg in matrix representation under orbital basis set. + """ + return einsum('ijt,t->ij', integrals_3c1e, b) + + +def build_vbg1(b, integrals_3c1e_ip_ovlp): + return -einsum('aijt,t->aij', integrals_3c1e_ip_ovlp, b) + +def build_grad(dm, dm_in, integrals_3c1e): + """ + grad_t = \int (rho(r) - rho_in(r)) g_t(r) dr + drho(r) = \sum_{ij} dm_{ij} xi_i(r) xi_j(r) + grad_t = \sum_{ij} dm_{ij} \int xi_i(r) xi_j(r) g_t(r) dr + = \sum_{ij} dm_{ij} I_{ijt} + Args: + dm (ndarray): current density matrix. + dm_in (ndarray): target density matrix. + integrals_3c1e (ndarray): integral table. + + Returns: + ndarray: gradient of Ws. + """ + g = einsum('ij,ijt->t', dm-dm_in, integrals_3c1e) + clean_array(g) + return g + + +def build_Hess(nbas_orbital, nbas_potential, n_occ, c, e, integrals_3c1e): + """ + """ + cTs = einsum('ij,jkt->ikt', c.T, integrals_3c1e) + cTsc = einsum('ijt,jk->ikt', cTs, c) + + n = nbas_potential + H = numpy.zeros([n, n], float) + for u in range(n): + for t in range(u+1): + for i in range(n_occ): + for a in range(n_occ, nbas_orbital): + H[u][t] += cTsc[i][a][u] * cTsc[a][i][t] / (e[i] - e[a]) + + if t != u: H[t][u] = H[u][t] + + H *= 4. + clean_array(H) + return H + + +def build_reg_grad(b, Tg, Lambda): + """ + Lambda regulation term appended to gradient + """ + reg_grad = einsum('j,ij->i', b, Tg) + reg_grad *= 4 * Lambda + return reg_grad + + +def build_reg_Hess(Tg, Lambda): + """ + Lambda regulation term appended to Hessian + """ + reg_Hess = Tg * Lambda * 4 + return reg_Hess + + +# interface +def build_grad_general(wy, idx=None): + if idx is None: + return build_grad(wy.dm, wy.dm_in, wy.integrals_3c1e_ovlp) + else: + return build_grad(wy.dm, wy.dm_in[idx], wy.integrals_3c1e_ovlp) + + +def build_grad_with_reg(wy, idx=None): + if idx is None: + g = build_grad(wy.dm, wy.dm_in, wy.integrals_3c1e_ovlp) + reg = build_reg_grad(wy.b_potential, wy.Tg, wy.Lambda) + else: + g = build_grad(wy.dm, wy.dm_in[idx], wy.integrals_3c1e_ovlp) + reg = build_reg_grad(wy.b_potential[idx], wy.Tg, wy.Lambda) + return g - reg + + +def build_Hess_general(wy, idx=None): + if idx is None: + return build_Hess( + wy.nbas_orbital, + wy.nbas_potential, + wy.n_occ, + wy.c, wy.e, + wy.integrals_3c1e_ovlp + ) + else: + return build_Hess( + wy.nbas_orbital, + wy.nbas_potential, + wy.n_occ, + wy.c[idx], wy.e[idx], + wy.integrals_3c1e_ovlp + ) + + +def build_Hess_with_reg(wy, idx=None): + H = build_Hess_general(wy, idx=idx) + reg = build_reg_Hess(wy.Tg, wy.Lambda) + return H - reg + diff --git a/oep-wy/constrain.py b/oep-wy/constrain.py new file mode 100644 index 0000000..44a3c44 --- /dev/null +++ b/oep-wy/constrain.py @@ -0,0 +1,50 @@ +import numpy, numpy.linalg + + +einsum = numpy.einsum + + +def improve_b_none(b, **kwargs): return b + + +# Zero-force constrain +def improve_b_zf(b, dm0, Sg, integrals_3c1e_ip_ovlp, force_v0=0.): + """ + Simplified version of Yair Kurzweil and Martin Head-Gordon, + PRA, 80, 012509 (2009) to apply zero-force constrain with + respect to target (CCSD) density. + + Args: + b (ndarray): vbg coefficients at current iteration. + dm0 (ndarray): target density matrix in AO. + Sg (ndarray): integral \int g_u(r) g_t(r) dr. + integrals_3c1e_ip_ovlp (ndarray): + integral \int nabla xi_i(r) xi_j(r) g_u(r) dr + force_v0 (ndarray): force due to v0 and rho0. + + Returns: + Revised vbg coefficients that meet the zero-force constrains. + """ + + nbas_orbital = dm0.shape[0] + nbas_potential = len(b) + n = nbas_potential + 3 + + dm0_I = einsum('ij,aijt->at', dm0, integrals_3c1e_ip_ovlp) + dm0_I += einsum('ij,ajit->at', dm0, integrals_3c1e_ip_ovlp) + + A = numpy.zeros([n, n]) + B = numpy.zeros(n) + + A[:nbas_potential, :nbas_potential] = Sg + + A[:nbas_potential, nbas_potential:] = dm0_I.T + A[nbas_potential:, :nbas_potential] = dm0_I + # A[nbas_potential:, nbas_potential:] = 0. + + B[:nbas_potential] = einsum('ij,j->i', Sg, b) + B[nbas_potential:] = -force_v0 + + x = numpy.linalg.solve(A, B) + return x[:nbas_potential] + diff --git a/oep-wy/dataset.py b/oep-wy/dataset.py new file mode 100644 index 0000000..e4ff82c --- /dev/null +++ b/oep-wy/dataset.py @@ -0,0 +1,234 @@ +from __future__ import print_function, division +import errno +import warnings +import numpy +from pyscf import dft +try: + from tqdm import tqdm +except ImportError: + warning.warn('tqdm not found. Progress monitor is disabled.', ImportWarning) + tqdm = None + +from density import _density_on_grids2 +from potential import _vbg_on_grids + + +BLK_SIZE = 200 + + +def _mesh_xz(mesh): + print('Transform grids onto half xz') + coords = numpy.zeros([len(mesh), 3]) + coords[:, 0] = numpy.sqrt( + numpy.sum( + mesh[:, :2] * mesh[:, :2], + axis=1 + )) + coords[:, 2] = mesh[:, 2] + coords_tuple = [tuple(c) for c in coords] + new_mesh = numpy.asarray(list(set(coords_tuple))) + print('Refined mesh size: %d' % (len(new_mesh))) + return new_mesh + + +def _mesh_xz_half(mesh, sgn=1): + print('Transform grids onto half xz-plane') + coords = numpy.zeros([len(mesh), 3]) + coords[:, 0] = numpy.sqrt( + numpy.sum( + mesh[:, :2] * mesh[:, :2], + axis=1 + )) + coords[:, 2] = numpy.abs(mesh[:, 2]) * sgn + coords_tuple = [tuple(c) for c in coords] + new_mesh = numpy.asarray(list(set(coords_tuple))) + print('Refined mesh size: %d' % (len(new_mesh))) + return new_mesh + + +def _rot(rad, d): + if d == 0: + return numpy.array([ + [1., 0., 0.], + [0., numpy.cos(rad), -numpy.sin(rad)], + [0., numpy.sin(rad), numpy.cos(rad)], + ]) + if d == 1: + return numpy.array([ + [numpy.cos(rad), 0., numpy.sin(rad)], + [0., 1., 0.], + [-numpy.sin(rad), 0., numpy.cos(rad)], + ]) + if d == 2: + return numpy.array([ + [numpy.cos(rad), -numpy.sin(rad), 0], + [numpy.sin(rad), numpy.cos(rad), 0], + [0., 0., 1.], + ]) + + +def gen_mesh(mol, opts): + if True: # grid type == ?? + grids = dft.gen_grid.Grids(mol) + grids.prune = None + grids.level = opts['MeshLevel'] + grids.build() + mesh = grids.coords + print('Origin mesh size: %d' % (len(mesh))) + sym = opts['Symmetric'].lower() if opts['Symmetric'] is not None else None + if opts['RandomTransform']: sym = 'none' + if sym is None or sym == 'none': + pass + elif sym == 'xz': + mesh = _mesh_xz(mesh) + elif sym == 'xz+': + mesh = _mesh_xz_half(mesh, 1) + elif sym == 'xz-': + mesh = _mesh_xz_half(mesh, -1) + else: + warnings.warn('Unknown Symmetric option. Fallback to ``None"', RuntimeWarning) + + rot_mat = None + if opts['RandomTransform']: + rad = numpy.random.rand(3) * 2 * numpy.pi + print('Rotation angle') + print('\tx: %.12lf' % (rad[0])) + print('\ty: %.12lf' % (rad[1])) + print('\tz: %.12lf' % (rad[2])) + rot_mat = numpy.zeros([4, 3, 3]) + for i in range(3): + rot_mat[i] = _rot(rad[i], i) + rot_mat[3] = numpy.einsum('ij,jk,kl->il', rot_mat[0], rot_mat[1], rot_mat[2]) + origin_mesh = mesh.copy() + mesh = numpy.einsum('ij,jk->ik', rot_mat[3], origin_mesh.T).T + assert(mesh.shape == origin_mesh.shape) + + if rot_mat is not None: + return mesh, origin_mesh, rot_mat + else: + return mesh + + +def _gen_offset(cube_length, cube_point): + a = cube_length + na = cube_point + da = a / float(na - 1) + a0 = -a / 2. + + offset = numpy.zeros([na*na*na, 3], dtype=float) + p = 0 + for i in range(na): + for j in range(na): + for k in range(na): + offset[p][0] = a0 + da * i + offset[p][1] = a0 + da * j + offset[p][2] = a0 + da * k + p += 1 + + return offset + # END of _gen_offset() + + +def gen_grids(mesh, cube_length, cube_point): + offset = _gen_offset(cube_length, cube_point) + coords = numpy.zeros([len(mesh)*len(offset), 3], dtype=float) + na3 = len(offset) + assert(na3 == cube_point**3) + + for i, m in enumerate(mesh): + coords[i * na3 : (i + 1) * na3] = m + offset + + return coords + # END of gen_grids() + + +def _gen_data(wy, mesh, coords, dm_oep, b): + rho = _density_on_grids2(wy.mol, coords, dm_oep, deriv=1) + pbg = _vbg_on_grids(wy, mesh, b) + return rho, pbg + # END of _gen_data() + + +def _pack_data(rho, pbg, n, na3): + rho, rhox, rhoy, rhoz = rho + + rho = rho.reshape(n, na3) + rhox = rhox.reshape(n, na3) + rhoy = rhoy.reshape(n, na3) + rhoz = rhoz.reshape(n, na3) + pbg = pbg.reshape(n, -1) + return numpy.concatenate((rho, rhox, rhoy, rhoz, pbg), axis=1) + # END of _pack_data + + +def gen_data(wy, mesh, coords, cube_point): + if wy.b_potential.ndim == 2: + return ugen_data(wy, mesh, coords, cube_point) + + na = cube_point + na3 = na * na * na + data = numpy.empty([len(mesh), 4 * na3 + 1], dtype=numpy.float32) + + total_size = len(mesh) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + pbar = None + if tqdm is not None: + pbar = tqdm(range(total_size)) + + for ib in range(n_blk): + index_m = slice(ib * BLK_SIZE, (ib + 1) * BLK_SIZE) + index_c = slice(ib * BLK_SIZE * na3, (ib + 1) * BLK_SIZE * na3) + rho, pbg = _gen_data(wy, mesh[index_m], coords[index_c], wy.dm_oep, wy.b_potential) + data_slice = _pack_data(rho, pbg, BLK_SIZE, na3) + data[index_m] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(BLK_SIZE) + + if res > 0: + rho, pbg = _gen_data(wy, mesh[-res:], coords[-res * na3:], wy.dm_oep, wy.b_potential) + data_slice = _pack_data(rho, pbg, res, na3) + data[-res:] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(res) + + if pbar is not None: pbar.close() + + return data + + +def ugen_data(wy, mesh, coords, cube_point): + na = cube_point + na3 = na * na * na + data = numpy.empty([2, len(mesh), 4 * na3 + 1], dtype=numpy.float32) + + total_size = len(mesh) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + for ispin in [0, 1]: + pbar = None + if tqdm is not None: + pbar = tqdm(range(total_size)) + for ib in range(n_blk): + index_m = slice(ib * BLK_SIZE, (ib + 1) * BLK_SIZE) + index_c = slice(ib * BLK_SIZE * na3, (ib + 1) * BLK_SIZE * na3) + rho, pbg = _gen_data(wy, mesh[index_m], coords[index_c], wy.dm_oep[ispin], wy.b_potential[ispin]) + data_slice = _pack_data(rho, pbg, BLK_SIZE, na3) + data[ispin][index_m] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(BLK_SIZE) + + if res > 0: + rho, pbg = _gen_data(wy, mesh[-res:], coords[-res * na3:], wy.dm_oep[ispin], wy.b_potential[ispin]) + data_slice = _pack_data(rho, pbg, res, na3) + data[ispin][-res:] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(res) + + if pbar is not None: pbar.close() + + return data + + diff --git a/oep-wy/dataset_main.py b/oep-wy/dataset_main.py new file mode 100644 index 0000000..79e9478 --- /dev/null +++ b/oep-wy/dataset_main.py @@ -0,0 +1,32 @@ +from __future__ import print_function +import numpy +import os +import sys + +from Config import get_options +from wy import WY +from density import * +from potential import * + + +def dataset(): + + + +def main(): + oep_opts = get_options(sys.argv[1], 'OEP') + dataset_opts = get_options(sys.argv[1], 'DATASET') + + for k, v in oep_opts.items(): + print(k, '\t', v, '\t', v.__class__) + print() + for k, v in datset_opts.items(): + print(k, '\t', v, '\t', v.__class__) + + print('==== OEP ====') + wy = WY(oep_opts) + wy.OEP() + print() + + + diff --git a/oep-wy/density.py b/oep-wy/density.py new file mode 100644 index 0000000..45b3e51 --- /dev/null +++ b/oep-wy/density.py @@ -0,0 +1,83 @@ +from __future__ import division +import numpy +from pyscf import dft + + +BLK_SIZE = 200 +einsum = numpy.einsum +XCTYPE = { + 0: 'lda', + 1: 'gga', + } + + +def _density_on_grids(mol, coords, dm): + ao_values = mol.eval_gto("GTOval_sph", coords) + rho = einsum('ij,ai,aj->a', dm, ao_values, ao_values) + return rho + # END of _density_on_grids() + + +def _density_on_grids2(mol, coords, dm, deriv=0): + ao_values = dft.numint.eval_ao(mol, coords, deriv=deriv) + rho = dft.numint.eval_rho(mol, ao_values, dm, xctype=XCTYPE[deriv]) + return rho + # END of _density_on_grids2() + + +def calc_real_space_density(mol, coords, dm): + total_size = len(coords) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + d = numpy.zeros(total_size, dtype=float) + for i in range(n_blk): + index = slice(i*BLK_SIZE, (i+1)*BLK_SIZE) + d[index] = _density_on_grids(mol, coords[index], dm) + if res > 0: + d[-res:] = _density_on_grids(mol, coords[-res:], dm) + + return d + # END of calc_real_space_density() + + +def calc_density_cube(wy, outfile='./rho_oep.cube', mode='diff', dm=None): + from pyscf.tools import cubegen + if dm is not None: + cubegen.density(wy.mol, outfile, dm) + else: + if mode.lower() == 'diff': + cubegen.density(wy.mol, outfile, wy.dm_out-wy.dm_in_ccsd) + elif mode.lower() == 'ccsd': + cubegen.density(wy.mol, outfile, wy.dm_in_ccsd) + elif mode.lower() == 'oep': + cubegen.density(wy.mol, outfile, wy.dm_out) + elif mode.lower() == 'rks': + cubegen.density(wy.mol, outfile, wy.mr.make_rdm1()) + else: + pass + + +def output_real_space_density(coords, d, path="./density.dat"): + with open(path, "w") as fp: + for i, coord in enumerate(coords): + fp.write("%+16.8e\t%+16.8e\t%+16.8e\t%+16.8e\n" % + (coord[0], coord[1], coord[2], d[i])) + + +def calc_real_space_density_error(rho0, rho1, weights): + drho = rho1 - rho0 + nelec0 = numpy.dot(rho0, weights) + nelec1 = numpy.dot(rho1, weights) + ndiff = numpy.dot(abs(drho), weights) + return nelec0, nelec1, ndiff + + # END of calc_real_space_density_error + +def I(rho0, rho1, weights): + drho = rho1 - rho0 + a = numpy.dot(drho*drho, weights) + b = numpy.dot(rho0*rho0, weights) + numpy.dot(rho1*rho1, weights) + return a / b + # END of I() + diff --git a/oep-wy/main.py b/oep-wy/main.py new file mode 100644 index 0000000..efbb9f3 --- /dev/null +++ b/oep-wy/main.py @@ -0,0 +1,187 @@ +from __future__ import print_function +import errno +import os +import sys +import numpy + + +import configparser +from Config import get_options +from wy import WY +from uwy import UWY +from dataset import * +from density import * +from potential import * + + + +def oep(): + oep_opts = get_options(sys.argv[1], 'OEP') + + for k, v in oep_opts.items(): + print(k, '\t', v, '\t', v.__class__) + + print('Check point files saved to %s' % (oep_opts['CheckPointPath'])) + try: + os.makedirs(oep_opts['CheckPointPath']) + # except FileExistsError: + except OSError as e: + if e.errno == errno.EEXIST: + print('CHK folder already exists. Old files will be overwritten.') + + print('==== OEP ====') + if oep_opts['SpinUnrestricted']: + wy = UWY(oep_opts) + wy.OEP() + else: + wy = WY(oep_opts) + wy.OEP() + print() + print('==== Force ====') + force = wy.force(False) + print(force) + + print('==== Analysis ====') + if oep_opts['RealSpaceAnalysis']: + coords = wy.mr.grids.coords + weights = wy.mr.grids.weights + if oep_opts['SpinUnrestricted']: + rho_in = numpy.array([ + calc_real_space_density(wy.mol, coords, wy.dm_in[0]), + calc_real_space_density(wy.mol, coords, wy.dm_in[1]), + ]) + rho_oep = numpy.array([ + calc_real_space_density(wy.mol, coords, wy.dm_oep[0]), + calc_real_space_density(wy.mol, coords, wy.dm_oep[1]), + ]) + rho_diff = rho_oep - rho_in + + output_real_space_density(coords, rho_diff[0], '%s/rho_diff_a.dat' % (wy.chk_path)) + output_real_space_density(coords, rho_diff[1], '%s/rho_diff_b.dat' % (wy.chk_path)) + output_real_space_density(coords, rho_in[0], '%s/rho_in_a.dat' % (wy.chk_path)) + output_real_space_density(coords, rho_in[1], '%s/rho_in_b.dat' % (wy.chk_path)) + output_real_space_density(coords, rho_oep[0], '%s/rho_oep_a.dat' % (wy.chk_path)) + output_real_space_density(coords, rho_oep[1], '%s/rho_oep_b.dat' % (wy.chk_path)) + + print('Density difference in real space: rho_in, rho_oep, abs_diff') + print('%16.12e\t%16.12e\t%16.12e' % (calc_real_space_density_error(rho_in[0], rho_oep[0], weights))) + print('%16.12e\t%16.12e\t%16.12e' % (calc_real_space_density_error(rho_in[1], rho_oep[1], weights))) + + pbg = calc_real_space_vbg(wy, coords) + output_real_space_potential(coords, pbg[0], '%s/pbg_a.dat' % (wy.chk_path)) + output_real_space_potential(coords, pbg[1], '%s/pbg_b.dat' % (wy.chk_path)) + + else: + rho_in = calc_real_space_density(wy.mol, coords, wy.dm_in) + output_real_space_density(coords, rho_in, '%s/rho_in.dat' % (wy.chk_path)) + rho_oep = calc_real_space_density(wy.mol, coords, wy.dm_oep) + output_real_space_density(coords, rho_oep, '%s/rho_oep.dat' % (wy.chk_path)) + rho_diff = rho_oep - rho_in + output_real_space_density(coords, rho_diff, '%s/rho_diff.dat' % (wy.chk_path)) + + print('Density difference in real space: rho_in, rho_oep, abs_diff') + print('%16.12e\t%16.12e\t%16.12e' % (calc_real_space_density_error(rho_in, rho_oep, weights))) + + pbg = calc_real_space_vbg(wy, coords) + output_real_space_potential(coords, pbg, '%s/pbg.dat' % (wy.chk_path)) + + # if (oep_opts['FullRealSpacePotential'] and oep_opts['ReferencePotential'][0].lower() == 'fermi-amaldi'): + # dm0 = numpy.load(oep_opts['ReferencePotential'][1]) + # dm = (wy.mol.nelectron - 1) / wy.mol.nelectron * dm0 - wy.dm_oep + # pj = calc_real_space_vj(wy, coords, dm) + # output_real_space_potential(coords, pj, '%s/pxc.dat' % (wy.chk_path)) + + print('Mulliken analysis') + ao_slice = wy.mol.aoslice_by_atom() + print(' OEP') + q = numpy.einsum('ij,ji->i', wy.dm_oep, wy.mol.intor('int1e_ovlp')) + for ia in range(wy.mol.natm): + s0, s1, p0, p1 = ao_slice[ia] + print(' ', wy.mol.atom_symbol(ia), q[p0:p1].sum()) + print(' CCSD') + q = numpy.einsum('ij,ji->i', wy.dm_ccsd, wy.mol.intor('int1e_ovlp')) + for ia in range(wy.mol.natm): + s0, s1, p0, p1 = ao_slice[ia] + print(' ', wy.mol.atom_symbol(ia), q[p0:p1].sum()) + + print('==== END OF OEP ====') + return wy + # END of oep() + + +def dataset(wy): + dataset_opts = get_options(sys.argv[1], 'DATASET') + for k, v in dataset_opts.items(): + print(k, '\t', v, '\t', v.__class__) + + try: + os.makedirs(dataset_opts['OutputPath']) + # except FileExistsError: + except OSError as e: + if e.errno == errno.EEXIST: + pass + + spin_unrestricted = wy.b_potential.ndim == 2 + + fn = '%s/%s' % (dataset_opts['OutputPath'], dataset_opts['OutputName']) + if not spin_unrestricted: + if os.path.isfile('%s.npy' % (fn)): + print('Data file %s.npy exists and will be overwritten.' % (fn)) + else: + if os.path.isfile('%s_a.npy' % (fn)): + print('Data file %s_a.npy exists and will be overwritten.' % (fn)) + if os.path.isfile('%s_b.npy' % (fn)): + print('Data file %s_b.npy exists and will be overwritten.' % (fn)) + + print('==== DATASET ====') + + if dataset_opts['RandomTransform']: + mesh, origin_mesh, rot_mat = gen_mesh(wy.mol, dataset_opts) + else: + mesh = gen_mesh(wy.mol, dataset_opts) + rot_mat = None + origin_mesh = None + + coords = gen_grids(mesh, dataset_opts['CubeLength'], dataset_opts['CubePoint']) + origin_coords = None + if rot_mat is not None: + inv_rot_mat = numpy.linalg.inv(rot_mat[3]) + origin_coords = numpy.einsum('ij,jk->ik', inv_rot_mat, coords.T).T + + if origin_coords is not None: + data = gen_data(wy, origin_mesh, origin_coords, dataset_opts['CubePoint']) + else: + data = gen_data(wy, mesh, coords, dataset_opts['CubePoint']) + + if not spin_unrestricted: + numpy.save(fn, data) + else: + numpy.save('%s_a' % (fn), data[0]) + numpy.save('%s_b' % (fn), data[1]) + numpy.save('%s_coords' % (fn), mesh) + if origin_mesh is not None: + numpy.save('%s_coords_no_rot' % (fn), origin_mesh) + + print('Data size:', data.shape) + print('==== END OF DATASET ====') + + # END of dataset() + + +def main(): + config = configparser.ConfigParser() + config.read(sys.argv[1]) + sections = config.sections() + if 'OEP' in sections: + wy = oep() + + if 'DATASET' in sections: + dataset(wy) + + +if __name__ == '__main__': + main() + print() + + + diff --git a/oep-wy/potential.py b/oep-wy/potential.py new file mode 100644 index 0000000..dc984e8 --- /dev/null +++ b/oep-wy/potential.py @@ -0,0 +1,110 @@ +from __future__ import division +import numpy + + +BLK_SIZE = 200 +einsum = numpy.einsum + + +def _vbg_on_grids(wy, coords, b=None): + if b is None: b = wy.b_potential + aux = wy.mol.copy() + aux.basis = wy.concatenate_basis + aux.build() + + concatenate_ao_values = aux.eval_gto("GTOval_sph", coords) + + potential_ao_values = numpy.empty([len(coords), wy.nbas_potential]) + ptr_orb = 0 + ptr_pot = 0 + for i in range(wy.mol.natm): + ptr_orb_inc = wy.nbas_orbital_atom[i] + ptr_pot_inc = wy.nbas_potential_atom[i] + potential_ao_values[:, ptr_pot:ptr_pot+ptr_pot_inc] = \ + concatenate_ao_values[:, ptr_orb+ptr_orb_inc:ptr_orb+ptr_orb_inc+ptr_pot_inc] + ptr_orb += ptr_orb_inc + ptr_pot_inc + ptr_pot += ptr_pot_inc + + # sum_{t} b_{t} g_{t}(r) + # potential = einsum('ij,j->i', potential_ao_values, wy.b_potential) + potential = einsum('ij,j->i', potential_ao_values, b) + + return potential + # END of _vbg_on_grids() + + +def _vj_on_grids(wy, coords, dm): + print('Compute potential of electron density. Wait patiently... ', end='', flush=True) + aux = wy.mol.copy() + + vj = numpy.zeros(len(coords)) + for i, p in enumerate(coords): + aux.set_rinv_origin(p) + vj[i] = numpy.einsum('ij,ji', aux.intor('int1e_rinv'), dm) + print('Done.', flush=True) + return vj + # END of _vj_on_grids() + + +def calc_real_space_vbg(wy, coords): + total_size = len(coords) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + if wy.b_potential.ndim == 1: + p = numpy.zeros(total_size, dtype=float) + for i in range(n_blk): + index = slice(i*BLK_SIZE, (i+1)*BLK_SIZE) + p[index] = _vbg_on_grids(wy, coords[index]) + + if res > 0: + p[-res:] = _vbg_on_grids(wy, coords[-res:]) + else: + p = numpy.zeros([2, total_size], dtype=float) + for k in range(2): + for i in range(n_blk): + index = slice(i*BLK_SIZE, (i+1)*BLK_SIZE) + p[k][index] = _vbg_on_grids(wy, coords[index], b=wy.b_potential[k]) + + if res > 0: + p[k][-res:] = _vbg_on_grids(wy, coords[-res:], b=wy.b_potential[k]) + + return p + # END of calc_real_space_vbg() + + +def calc_real_space_vj(wy, coords, dm): + return _vj_on_grids(wy, coords, dm) + # END of calc_real_space_vj() + + +def calc_vbg_cube(wy, outfile='./vbg.cube'): + aux = wy.mol.copy() + aux.basis = wy.concatenate_basis + aux.build() + + coef = numpy.zeros(wy.nbas_orbital + wy.nbas_potential) + + ptr_orb = 0 + ptr_pot = 0 + pb = 0 + for i in range(wy.mol.natm): + ptr_orb_inc = wy.nbas_orbital_atom[i] + ptr_pot_inc = wy.nbas_potential_atom[i] + coef[ptr_orb+ptr_orb_inc:ptr_orb+ptr_orb_inc+ptr_pot_inc] = wy.b_potential[ptr_pot:ptr_pot+ptr_pot_inc] + ptr_orb += ptr_orb_inc + ptr_pot_inc + ptr_pot += ptr_pot_inc + + from pyscf.tools import cubegen + cubegen.orbital(aux, outfile, coef) + # END of calc_vbg_cube() + + +def output_real_space_potential(coords, p, path="./potential.dat"): + with open(path, "w") as fp: + for i, coord in enumerate(coords): + fp.write("%+16.8e\t%+16.8e\t%+16.8e\t%+16.8e\n" % + (coord[0], coord[1], coord[2], p[i])) + # END of output_real_space_potential() + + diff --git a/oep-wy/search.py b/oep-wy/search.py new file mode 100644 index 0000000..4ac9242 --- /dev/null +++ b/oep-wy/search.py @@ -0,0 +1,214 @@ +from __future__ import print_function +from math import sqrt +import numpy + +from build_matrix import build_grad_general, build_grad_with_reg, build_Hess_general, build_Hess_with_reg, build_vbg +from solve_KS import solve_KS +from utility import clean_array +from constrain import * + +from pyscf.grad import rks as rks_grad +from wy_force import Pulay_term +from wy_force import get_veff1 + + +einsum = numpy.einsum +LINE_SEARCH_CONV_CRIT = 1.E-4 +LINE_SEARCH_ALPHA = 1.E-4 +LINE_SEARCH_STEP_MAX = 1.E99 + + +def solve_SVD(A, b, cutoff): + s, U = numpy.linalg.eigh(A) + VT = U.transpose() + U[:, s > 0] *= -1 + s = -abs(s) + + for i in range(len(s)): + if abs(s[i]) >= cutoff: + s[i] = 1. / s[i] + else: + s[i] = 0. + + invA = einsum('ij,j->ij', VT.T, s) + invA = einsum('ij,jk->ik', invA, U.T) + invA = (invA + invA.T) * 0.5 + + x = einsum('ij,j->i', invA, b) + return x + + +def calc_Ws_Ts(T, v, dm, ddm): + Ts = einsum('ij,ji->', T, dm) + Ws = Ts + einsum('ij,ji->', v, ddm) + return Ws, Ts + + +def initialize(wy): + if 'ZeroForce' in wy.constrains: + if wy.reference_potential == 'hfx': + assert(wy.mr.xc.lower() == 'hf,') + from pyscf.grad import rks as rks_grad + wy.gmr = rks_grad.Gradients(wy.mr) + vj, vk = wy.gmr.get_jk() + wy.v01 = vj - vk * 0.5 + + force_v0_atom = Pulay_term(wy, wy.v01, wy.dm_in) + wy.force_v0 = numpy.sum(force_v0_atom, axis=0) + + wy.constrain_kwargs = { + 'dm0': wy.dm_in, + 'Sg': wy.Sg, + 'integrals_3c1e_ip_ovlp': wy.integrals_3c1e_ip_ovlp, + 'force_v0': -wy.force_v0, + } + wy.improve_b = improve_b_zf + else: + wy.constrain_kwargs = {} + wy.improve_b = improve_b_none + + if 'LambdaRegulation' in wy.constrains: + wy.build_gradient_matrix = build_grad_with_reg + wy.build_Hessian_matrix = build_Hess_with_reg + else: + wy.build_gradient_matrix = build_grad_general + wy.build_Hessian_matrix = build_Hess_general + + wy.b_potential = wy.b_init.copy() + + # END of initialize() + + +def search(wy): + initialize(wy) + + print('Start searching...') + print('# iter sum abs grad max abs grad # elec lambda') + print('--------------------------------------------------------------------------------') + + converged = False + for niter in range(wy.oep_max_iter): + clean_array(wy.b_potential) + + wy.b_potential = wy.improve_b(wy.b_potential, **(wy.constrain_kwargs)) + + wy.e, wy.c, wy.dm, wy.vbg = solve_KS( + wy.b_potential, + wy.integrals_3c1e_ovlp, + wy.H, wy.S, + wy.mo_occ) + + wy.gradient = wy.build_gradient_matrix(wy) + + print('%5d\t%16.8e\t%16.8e\t%.6lf' % + ( + niter+1, + numpy.sum(abs(wy.gradient)), + numpy.max(abs(wy.gradient)), + numpy.einsum('ij,ji->', wy.dm, wy.S), + ), + end='') + + if numpy.all(abs(wy.gradient) < wy.oep_crit): + converged = True + print() + break + + wy.Hessian = wy.build_Hessian_matrix(wy) + + update_direction = -solve_SVD(wy.Hessian, wy.gradient, wy.svd_cutoff) + clean_array(update_direction) + res = line_search(wy, update_direction) + wy.b_potential, update_lambda, wy.gradient, stop_iter = res + + if stop_iter: + print('\n\tSeems to find solution. Check...') + if numpy.all(abs(wy.gradient) < wy.oep_crit): + converged = True + else: + print('\tReaches accuracy limit at current setup...Halt...') + converged = False + break + else: + print('%12.4e' % (update_lambda)) + + print('OEP done.') + + force_v0_atom = numpy.zeros([wy.mol.natm, 3]) + offsetdic = wy.mol.offset_nr_by_atom() + + wy.b_potential = wy.improve_b(wy.b_potential, **(wy.constrain_kwargs)) + + Ws, Ts = calc_Ws_Ts( + wy.T, + wy.vn+wy.v0+wy.vbg, + wy.dm, + wy.dm-wy.dm_in, + ) + print('Stat:\tWs: %16.8e\tTs: %16.8e\tDiff: %16.8e' % (Ws, Ts, Ws - Ts)) + + # END of search() + + +def line_search(wy, p): + """ + Line search. + + Args: + wy (object): WY instance. + p (ndarray): update direction. + """ + + b_old = wy.b_potential + gradient = wy.gradient + Hessian = wy.Hessian + + slope = -numpy.dot(gradient, gradient) + f_old = -0.5 * slope + + lambda1 = 1.0 + b_new = numpy.empty(b_old.shape, dtype=float) + f2 = 0.0; lambda2 = 0.0 + + while True: + b_new = b_old + lambda1 * p + wy.b_potential = b_new + + res = solve_KS( + wy.b_potential, + wy.integrals_3c1e_ovlp, + wy.H, wy.S, + wy.mo_occ) + wy.e, wy.c, wy.dm, wy.vbg = res + + g_new = wy.build_gradient_matrix(wy) + f_new = 0.5 * numpy.dot(g_new, g_new) + + if lambda1 < LINE_SEARCH_CONV_CRIT: + return b_new, lambda1, g_new, True + if f_new <= f_old + LINE_SEARCH_ALPHA * lambda1 * slope: + return b_new, lambda1, g_new, False + if lambda1 == 1.0: + tmp_lambda1 = -slope / (2.0 * (f_new - f_old - slope)) + else: + rhs1 = f_new - f_old - lambda1 * slope + rhs2 = f2 - f_old - lambda2 * slope + a = (rhs1 / (lambda1 * lambda1) - rhs2 / (lambda2 * lambda2)) / (lambda1 - lambda2) + b = (-lambda2 * rhs1 / (lambda1 * lambda1) + lambda1 * rhs2 / (lambda2 * lambda2)) / (lambda1 - lambda2) + if abs(a) < 1.e-10: + tmp_lambda1 = -slope / (2.0 * b) + else: + disc = b * b - 3.0 * a * slope + if disc < 0.0: + tmp_lambda1 = 0.5 * lambda1 + elif b <= 0.0: + tmp_lambda1 = (-b + sqrt(disc)) / (3.0 * a) + else: + tmp_lambda1 = -slope / (b + sqrt(disc)) + if tmp_lambda1 > 0.5 * lambda1: + tmp_lambda1 = 0.5 * lambda1 + lambda2 = lambda1 + f2 = f_new + lambda1 = max(tmp_lambda1, 0.1 * lambda1) + + diff --git a/oep-wy/solve_KS.py b/oep-wy/solve_KS.py new file mode 100644 index 0000000..772391a --- /dev/null +++ b/oep-wy/solve_KS.py @@ -0,0 +1,34 @@ +import numpy +import scipy.linalg + +from build_matrix import build_vbg + + +def solve_KS(b, integrals_3c1e_ovlp, h, s, mo_occ): + """ + Solve the KS equation. + + Args: + b (ndarray): vbg coefficients. + integrals_3c1e_ovlp (ndarray): integral table used to build vbg matrix. + h (ndarray): fixed matrix T + vn + v0. + s (ndarray): overlap matrix. + mo_occ (ndarray): occupation number of MOs. + + Returns: + MO energies; + MO coefficients; + density matrix in AO; + vbg matrix in AO. + """ + + vbg = build_vbg(b, integrals_3c1e_ovlp) + + f = h + vbg + e, c = scipy.linalg.eigh(f, s) + + mocc = c[:, mo_occ>0] + dm = numpy.dot(mocc * mo_occ[mo_occ>0], mocc.T.conj()) + + return e, c, dm, vbg + diff --git a/oep-wy/udataset.py b/oep-wy/udataset.py new file mode 100644 index 0000000..ff158d0 --- /dev/null +++ b/oep-wy/udataset.py @@ -0,0 +1,75 @@ +from __future__ import print_function, division +import errno +import warnings +import numpy +from pyscf import dft +try: + from tqdm import tqdm +except ImportError: + warning.warn('tqdm not found. Progress monitor is disabled.', ImportWarning) + tqdm = None + +from density import _density_on_grids2 +from potential import _vbg_on_grids + + +BLK_SIZE = 200 + + +def _gen_data(wy, mesh, coords): + rho = _density_on_grids2(wy.mol, coords, wy.dm_oep, deriv=1) + pbg = _vbg_on_grids(wy, mesh) + return rho, pbg + # END of _gen_data() + + +def _pack_data(rho, pbg, n, na3): + rho, rhox, rhoy, rhoz = rho + + rho = rho.reshape(n, na3) + rhox = rhox.reshape(n, na3) + rhoy = rhoy.reshape(n, na3) + rhoz = rhoz.reshape(n, na3) + pbg = pbg.reshape(n, -1) + return numpy.concatenate((rho, rhox, rhoy, rhoz, pbg), axis=1) + # END of _pack_data + + +def ugen_data(wy, mesh, coords, cube_point): + na = cube_point + na3 = na * na * na + data = numpy.empty([len(mesh), 4 * na3 + 1], dtype=numpy.float32) + + total_size = len(mesh) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + pbar = None + if tqdm is not None: + pbar = tqdm(range(total_size)) + + for ib in range(n_blk): + index_m = slice(ib * BLK_SIZE, (ib + 1) * BLK_SIZE) + index_c = slice(ib * BLK_SIZE * na3, (ib + 1) * BLK_SIZE * na3) + rho, pbg = _gen_data(wy, mesh[index_m], coords[index_c]) + data_slice = _pack_data(rho, pbg, BLK_SIZE, na3) + data[index_m] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(BLK_SIZE) + + if res > 0: + rho, pbg = _gen_data(wy, mesh[-res:], coords[-res * na3:]) + data_slice = _pack_data(rho, pbg, res, na3) + data[-res:] = data_slice.astype(numpy.float32) + + if pbar is not None: pbar.update(res) + + if pbar is not None: pbar.close() + + return data + + + + + + diff --git a/oep-wy/usearch.py b/oep-wy/usearch.py new file mode 100644 index 0000000..3c1cb72 --- /dev/null +++ b/oep-wy/usearch.py @@ -0,0 +1,221 @@ +from __future__ import print_function +from math import sqrt +import numpy + +from build_matrix import build_grad_general, build_grad_with_reg, build_Hess_general, build_Hess_with_reg, build_vbg +from solve_KS import solve_KS +from utility import clean_array +from constrain import * + +from pyscf.grad import rks as rks_grad +from wy_force import Pulay_term +from wy_force import get_veff1 + + +einsum = numpy.einsum +LINE_SEARCH_CONV_CRIT = 1.E-4 +LINE_SEARCH_ALPHA = 1.E-4 +LINE_SEARCH_STEP_MAX = 1.E99 + + +def solve_SVD(A, b, cutoff): + s, U = numpy.linalg.eigh(A) + VT = U.transpose() + U[:, s > 0] *= -1 + s = -abs(s) + + for i in range(len(s)): + if abs(s[i]) >= cutoff: + s[i] = 1. / s[i] + else: + s[i] = 0. + # f = s[i] * s[i] / (s[i] * s[i] + cutoff * cutoff) + # s[i] = f / s[i] + + invA = einsum('ij,j->ij', VT.T, s) + invA = einsum('ij,jk->ik', invA, U.T) + invA = (invA + invA.T) * 0.5 + + x = einsum('ij,j->i', invA, b) + return x + + +def calc_Ws_Ts(T, v, dm, ddm): + Ts = einsum('ij,ji->', T, dm) + Ws = Ts + einsum('ij,ji->', v, ddm) + return Ws, Ts + + +def initialize(uwy): + if False and 'ZeroForce' in wy.constrains: + if uwy.reference_potential == 'hfx': + assert(uwy.mr.xc.lower() == 'hf,') + from pyscf.grad import rks as rks_grad + uwy.gmr = rks_grad.Gradients(wy.mr) + vj, vk = uwy.gmr.get_jk() + uwy.v01 = vj - vk * 0.5 + + force_v0_atom = Pulay_term(uwy, uwy.v01, uwy.dm_in) + uwy.force_v0 = numpy.sum(force_v0_atom, axis=0) + + uwy.constrain_kwargs = { + 'dm0': uwy.dm_in, + 'Sg': uwy.Sg, + 'integrals_3c1e_ip_ovlp': uwy.integrals_3c1e_ip_ovlp, + 'force_v0': -uwy.force_v0, + } + uwy.improve_b = improve_b_zf + else: + uwy.constrain_kwargs = {} + uwy.improve_b = improve_b_none + + if 'LambdaRegulation' in uwy.constrains: + uwy.build_gradient_matrix = build_grad_with_reg + uwy.build_Hessian_matrix = build_Hess_with_reg + else: + uwy.build_gradient_matrix = build_grad_general + uwy.build_Hessian_matrix = build_Hess_general + + uwy.b_potential = uwy.b_init.copy() + uwy.e = [list(), list()] + uwy.c = [list(), list()] + uwy.vbg = [list(), list()] + + # END of initialize() + + +def search(uwy, init=True): + if init: initialize(uwy) + + idx = 0 if init else 1 + if init: print('Start searching...') + print('# iter sum abs grad max abs grad # elec lambda') + print('--------------------------------------------------------------------------------') + + converged = False + for niter in range(uwy.oep_max_iter): + clean_array(uwy.b_potential[idx]) + + uwy.b_potential[idx] = uwy.improve_b(uwy.b_potential[idx], **(uwy.constrain_kwargs)) + + uwy.e[idx], uwy.c[idx], uwy.dm, uwy.vbg[idx] = solve_KS( + uwy.b_potential[idx], + uwy.integrals_3c1e_ovlp, + uwy.H[idx], uwy.S, + uwy.mo_occ[idx]) + + uwy.gradient = uwy.build_gradient_matrix(uwy, idx=idx) + + print('%5d\t%16.8e\t%16.8e\t%.6lf' % + ( + niter+1, + numpy.sum(abs(uwy.gradient)), + numpy.max(abs(uwy.gradient)), + numpy.einsum('ij,ji->', uwy.dm, uwy.S), + ), + end='') + + if numpy.all(abs(uwy.gradient) < uwy.oep_crit): + converged = True + print() + break + + uwy.Hessian = uwy.build_Hessian_matrix(uwy, idx) + + update_direction = -solve_SVD(uwy.Hessian, uwy.gradient, uwy.svd_cutoff) + clean_array(update_direction) + res = line_search(uwy, update_direction, idx) + uwy.b_potential[idx], update_lambda, uwy.gradient, stop_iter = res + + if stop_iter: + print('\n\tSeems to find solution. Check...') + if numpy.all(abs(uwy.gradient) < uwy.oep_crit): + converged = True + else: + print('\tReaches accuracy limit at current setup...Halt...') + converged = False + break + else: + print('%12.4e' % (update_lambda)) + + print('OEP done.') + + force_v0_atom = numpy.zeros([uwy.mol.natm, 3]) + offsetdic = uwy.mol.offset_nr_by_atom() + + uwy.b_potential[idx] = uwy.improve_b(uwy.b_potential[idx], **(uwy.constrain_kwargs)) + + Ws, Ts = calc_Ws_Ts( + uwy.T, + uwy.vn+uwy.v0[idx]+uwy.vbg[idx], + uwy.dm, + uwy.dm-uwy.dm_in[idx], + ) + print('Stat:\tWs: %16.8e\tTs: %16.8e\tDiff: %16.8e' % (Ws, Ts, Ws - Ts)) + + # END of search() + + +def line_search(uwy, p, idx): + """ + Line search. + + Args: + wy (object): WY instance. + p (ndarray): update direction. + """ + + b_old = uwy.b_potential[idx] + gradient = uwy.gradient + Hessian = uwy.Hessian + + slope = -numpy.dot(gradient, gradient) + f_old = -0.5 * slope + + lambda1 = 1.0 + b_new = numpy.empty(b_old.shape, dtype=float) + f2 = 0.0; lambda2 = 0.0 + + while True: + b_new = b_old + lambda1 * p + uwy.b_potential[idx] = b_new + + res = solve_KS( + uwy.b_potential[idx], + uwy.integrals_3c1e_ovlp, + uwy.H[idx], uwy.S, + uwy.mo_occ[idx]) + uwy.e[idx], uwy.c[idx], uwy.dm, uwy.vbg[idx] = res + + g_new = uwy.build_gradient_matrix(uwy, idx=idx) + f_new = 0.5 * numpy.dot(g_new, g_new) + + + if lambda1 < LINE_SEARCH_CONV_CRIT: + return b_new, lambda1, g_new, True + if f_new <= f_old + LINE_SEARCH_ALPHA * lambda1 * slope: + return b_new, lambda1, g_new, False + if lambda1 == 1.0: + tmp_lambda1 = -slope / (2.0 * (f_new - f_old - slope)) + else: + rhs1 = f_new - f_old - lambda1 * slope + rhs2 = f2 - f_old - lambda2 * slope + a = (rhs1 / (lambda1 * lambda1) - rhs2 / (lambda2 * lambda2)) / (lambda1 - lambda2) + b = (-lambda2 * rhs1 / (lambda1 * lambda1) + lambda1 * rhs2 / (lambda2 * lambda2)) / (lambda1 - lambda2) + if abs(a) < 1.e-10: + tmp_lambda1 = -slope / (2.0 * b) + else: + disc = b * b - 3.0 * a * slope + if disc < 0.0: + tmp_lambda1 = 0.5 * lambda1 + elif b <= 0.0: + tmp_lambda1 = (-b + sqrt(disc)) / (3.0 * a) + else: + tmp_lambda1 = -slope / (b + sqrt(disc)) + if tmp_lambda1 > 0.5 * lambda1: + tmp_lambda1 = 0.5 * lambda1 + lambda2 = lambda1 + f2 = f_new + lambda1 = max(tmp_lambda1, 0.1 * lambda1) + + diff --git a/oep-wy/utility.py b/oep-wy/utility.py new file mode 100644 index 0000000..5025df1 --- /dev/null +++ b/oep-wy/utility.py @@ -0,0 +1,83 @@ +import numpy +from pyscf import scf, cc + + +einsum = numpy.einsum + + +def rhf(mol): + """ + Use PySCF to do RHF calculation. + Args: + mol (Mole): PySCF Mole class. + + Returns: + PySCF RHF object with SCF converged. + """ + mf = scf.RHF(mol) + mf.run() + return mf + + +def ccsd(mol, mf=None): + """ + Use PySCF to do CCSD calculation. + Args: + mol (Mole): PySCF Mole class. + mf (RHF, optional): PySCF RHF class. + + Returns: + CCSD rdm1 in AO, + RHF dm in AO. + """ + + if mf is None: + mf = scf.RHF(mol) + mf.run() + + c = mf.mo_coeff + dm = mf.make_rdm1() + + mcc = cc.CCSD(mf) + ecc, t1, t2 = mcc.kernel() + rdm1 = mcc.make_rdm1() + rdm1_ao = einsum('pi,ij,qj->pq', c, rdm1, c.conj()) + + return rdm1, dm + + +def rks(mol, xc=None, grid_level=3): + """ + Use PySCF to do RKS calculation. + Args: + mol (Mole): PySCF Mole class. + xc (str, optional): xc functional. + grid_level (int, optional): numerical grids level. + Returns: + PySCF RKS object with SCF converged. + """ + mr = scf.RKS(mol) + if xc is not None: + mr.xc = xc + mr.grids.level = grid_level + mr.kernel() + return mr + + +def clean_array(A, crit=1e-16): + A[abs(A) < crit] = 0 + + +def dump_matrix(mat, file_path): + assert isinstance(mat, numpy.ndarray) + numpy.save(file_path, mat) + + +def print_mat(mat, name=None): + if name is None: + print(mat.shape) + print(mat) + else: + print(name, mat.shape) + print(mat) + diff --git a/oep-wy/uwy.py b/oep-wy/uwy.py new file mode 100644 index 0000000..0dd64a0 --- /dev/null +++ b/oep-wy/uwy.py @@ -0,0 +1,292 @@ +from __future__ import print_function, division +import numpy +import os, os.path +from pyscf import gto, scf, dft, cc + +from basis import get_integrals_3c1e, get_integrals_3c1e_ip_ovlp, get_overlap_g, get_kinetic_g +from IO import parse_str +from uwy_force import calc_force +from usearch import search + +einsum = numpy.einsum + +class UWY: + """ + Basis class to handle the WY method. + """ + + def __init__(self, opts): + self.opts = opts + self.chk_path = opts['CheckPointPath'] + + self._generate_mol(opts['Structure'], opts['OrbitalBasis']) + self._get_basis_info(opts['OrbitalBasis'], opts['PotentialBasis']) + self._get_fixed_matrix(opts['ReferencePotential'], opts['CheckPointPath']) + + self._get_input_dm(opts['InputDensity']) + self._get_init_coefficient(opts['PotentialCoefficientInit']) + + + # computation options + self.oep_max_iter = opts['MaxIterator'] + self.oep_crit = opts['ConvergenceCriterion'] + self.svd_cutoff = opts['SVDCutoff'] + self.Lambda = opts['LambdaRegulation'] + self.force_v0 = 0. + self.constrains = list() + if self.Lambda > 0: self.constrains.append('LambdaRegulation') + if opts['ZeroForceConstrain']: self.constrains.append('ZeroForce') + + + def _generate_mol(self, fn, basis): + atom_list, atom_str, charge, spin = parse_str(fn) + + self.mol = gto.M( + atom=atom_str, + basis=basis, + charge=charge, + spin=spin, + max_memory=32768, + ) + + n_elec = self.mol.nelectron + n_ao = self.mol.nao_nr() + self.mo_occ = numpy.zeros([2, n_ao]) + self.mo_occ[0][:n_elec//2] = 1 + self.mo_occ[1][:n_elec//2] = 1 + self.n_occ = n_elec // 2 + + self.mf = scf.UHF(self.mol) + self.mr = scf.UKS(self.mol) + + print('Structure info:') + for a in self.mol._atom: + print('%2s\t%+12.8e\t%+12.8e\t%+12.8e AA' % + (a[0], a[1][0], a[1][1], a[1][2])) + print('charge = %d\nspin = %d' % (self.mol.charge, self.mol.spin)) + # END of _generate_mol() + + + def _get_basis_info(self, orb_basis, pot_basis): + mol = self.mol + atoms = [mol.atom_symbol(i) for i in range(mol.natm)] + + res = get_integrals_3c1e( + mol, atoms, + orb_basis, pot_basis) + self.orbital_basis = res[0] + self.potential_basis = res[1] + self.concatenate_basis = res[2] + self.integrals_3c1e_ovlp = res[3] + + res = get_integrals_3c1e_ip_ovlp( + mol, atoms, + orb_basis, pot_basis) + self.integrals_3c1e_ip_ovlp = res[3] + + self.nbas_orbital = 0 + self.nbas_potential = 0 + self.nbas_orbital_atom = numpy.zeros(len(atoms), dtype=int) + self.nbas_potential_atom = numpy.zeros(len(atoms), dtype=int) + + for i, atom in enumerate(atoms): + for basis in self.orbital_basis[atom]: + self.nbas_orbital += basis[0] * 2 + 1 + self.nbas_orbital_atom[i] += basis[0] * 2 + 1 + if len(basis[1]) > 2: + self.nbas_orbital += basis[0] * 2 + 1 + self.nbas_orbital_atom[i] += basis[0] * 2 + 1 + for basis in self.potential_basis[atom]: + self.nbas_potential += basis[0] * 2 + 1 + self.nbas_potential_atom[i] += basis[0] * 2 + 1 + if len(basis[1]) > 2: + self.nbas_potential += basis[0] * 2 + 1 + self.nbas_potential_atom[i] += basis[0] * 2 + 1 + + self.Sg = get_overlap_g(self.mol, + self.concatenate_basis, + self.nbas_orbital_atom, + self.nbas_potential_atom) + self.Tg = get_kinetic_g(self.mol, + self.concatenate_basis, + self.nbas_orbital_atom, + self.nbas_potential_atom) + + self.aux_mol = self.mol.copy() + self.aux_mol.basis = self.concatenate_basis + self.aux_mol.build() + + # mr = scf.RKS(self.mol) + self.mr.grids.build() + self.orb_ao_value = dft.numint.eval_ao(self.mol, self.mr.grids.coords, deriv=1) + self.concatenate_ao_value = dft.numint.eval_ao(self.aux_mol, self.mr.grids.coords, deriv=1) + self.pot_ao_value = numpy.empty([4, len(self.mr.grids.coords), self.nbas_potential]) + ptr_orb = 0 + ptr_pot = 0 + for i in range(self.mol.natm): + ptr_orb_inc = self.nbas_orbital_atom[i] + ptr_pot_inc = self.nbas_potential_atom[i] + self.pot_ao_value[:, :, ptr_pot:ptr_pot+ptr_pot_inc] = \ + self.concatenate_ao_value[:, :, ptr_orb+ptr_orb_inc:ptr_orb+ptr_orb_inc+ptr_pot_inc] + ptr_orb += ptr_orb_inc + ptr_pot_inc + ptr_pot += ptr_pot_inc + # END of _get_basis_info() + + + def _get_fixed_matrix(self, ref_pot, chk_path): + mol = self.mol + self.S = mol.intor('int1e_ovlp_sph') + self.T = mol.intor('cint1e_kin_sph') + self.vn = mol.intor('cint1e_nuc_sph') + + if ref_pot[0].lower() == 'hfx': + self.reference_potential = 'hfx' + print("Use HFX reference potential") + self.mr.xc = 'hf,' + # if os.path.isfile('%s/dm_hfx.npy' % (chk_path)): + # print("Load dm from %s/dm_hfx.npy" % (chk_path)) + # dm_hfx = numpy.load('%s/dm_hfx.npy' % (chk_path)) + # self.mr.kernel(dm0=dm_hfx) + # else: + self.dm_hfx = numpy.load(ref_pot[1]) + self.mr.kernel() # dm0=numpy.load(ref_pot[1])) + # dm_hfx = self.mr.make_rdm1() + # print("Save dm to %s/dm_hfx.npy" % (chk_path)) + # numpy.save('%s/dm_hfx' % (chk_path), dm_hfx) + # numpy.save('%s/dm_rks_%s' % (chk_path, self.mr.xc), dm_hfx) + # self.v0 = self.mr.get_veff(self.mol, self.mr.make_rdm1()) + self.v0 = self.mr.get_veff(self.mol, self.dm_hfx) + + elif ref_pot[0].lower() == 'fermi-amaldi': + self.reference_potential = 'fermi-amaldi' + print("Use the Fermi-Amaldi reference potential") + self.dm_fa = numpy.load(ref_pot[1]) + if self.dm_fa.ndim == 3: self.dm_fa = self.dm_fa[0] + self.dm_fa[1] + from pyscf.scf import jk + self.v0 = jk.get_jk(mol, self.dm_fa)[0] * (mol.nelectron - 1) / mol.nelectron + self.v0 = numpy.array([self.v0, self.v0]) + + elif ref_pot[0].lower() == 'hfx-fa': + self.reference_potential = 'hfx-fa' + print("Use HFX reference potential for ALPHA density") + print("Use the Fermi-Amaldi reference potential for BETA density") + self.dm_hfx = numpy.load(ref_pot[1]) + self.dm_fa = numpy.load(ref_pot[1]) + if self.dm_fa.ndim == 3: self.dm_fa = self.dm_fa[0] + self.dm_fa[1] + self.mr.kernel(dm0=numpy.load(ref_pot[1])) + self.v0a = self.mr.get_veff(self.mol, self.dm_hfx)[0] + from pyscf.scf import jk + self.v0b = jk.get_jk(mol, self.dm_fa)[0] * (mol.nelectron - 1) / mol.nelectron + self.v0 = numpy.array([self.v0a, self.v0b]) + + elif ref_pot[0].lower() == 'sfa': + self.reference_potential = 'sfa' + print("Use the Scaled Fermi-Amaldi reference potential") + self.dm_fa = numpy.load(ref_pot[1]) + if len(ref_pot) >= 3: + self.sfa_factor = float(ref_pot[2]) + else: + self.sfa_factor = 1.0 + if self.dm_fa.ndim == 3: self.dm_fa = self.dm_fa[0] + self.dm_fa[1] + from pyscf.scf import jk + self.v0 = jk.get_jk(mol, self.dm_fa)[0] * self.sfa_factor + self.v0 = numpy.array([self.v0, self.v0]) + + elif ref_pot[0].lower() == 'shfx': + self.reference_potential = 'shfx' + if len(ref_pot) >= 3: + self.shfx_factor = float(ref_pot[2]) + else: + self.shfx_factor = 1.0 + print("Use Scaled HFX reference potential") + self.mr.xc = 'hf,' + self.dm_hfx = numpy.load(ref_pot[1]) + self.mr.kernel(dm0=numpy.load(ref_pot[1])) + from pyscf.scf import jk + vj, vk = self.mr.get_jk(mol, self.dm_hfx) + # self.v0 = self.mr.get_veff(self.mol, self.dm_hfx) * self.shfx_factor + self.v0 = vj[0] + vj[1] - vk * self.shfx_factor + + else: + raise NotImplementedError + + self.H = self.T + self.vn + self.v0 + # END of _get_fixed_matrix() + + + def _get_input_dm(self, input_dm): + if input_dm[0].lower() == 'none': + self.mf.kernel() + self.dm_rhf = self.mf.make_rdm1() + numpy.save('%s/dm_rhf' % (self.chk_path), self.dm_rhf) + c = self.mf.mo_coeff + + self.mcc = cc.CCSD(self.mf) + ecc, t1, t2 = self.mcc.kernel() + rdm1 = self.mcc.make_rdm1() + self.dm_ccsd = einsum('pi,ij,qj->pq', c, rdm1, c.conj()) + self.dm_in = self.dm_ccsd + numpy.save('%s/dm_ccsd' % (self.chk_path), self.dm_ccsd) + + elif input_dm[0].lower() == 'load': + self.dm_ccsd = numpy.load(input_dm[1]) + self.dm_in = self.dm_ccsd + else: + self.dm_in = None + self.dm_ccsd = None + # END of _get_input_dm() + + + def _get_init_coefficient(self, b_init): + if b_init[0].lower() == 'zeros': + self.b_init = numpy.array([ + numpy.zeros(self.nbas_potential), + numpy.zeros(self.nbas_potential)]) + print('Use zero initial values for b.') + elif b_init[0].lower() == 'load': + print('Load initial values for b from %s' % (b_init[1])) + if b_init[1].endswith('.npy'): + self.b_init = numpy.load(b_init[1]) + else: + self.b_init = numpy.loadtxt(b_init[1]) + else: + raise NotImplementedError + + # END of _get_init_coefficient() + + + def OEP(self): + self.dm_oep = [] + + search(self, True) + self.dm_oep.append(self.dm) + + if 'LambdaRegulation' in self.constrains: + ws_reg = 2 * einsum( + 'i,ij,j->', + self.b_potential[0], self.Tg, self.b_potential[0], + ) + print('Lambda regulation: %.12e\t%.12e' % (self.Lambda, ws_reg)) + + search(self, False) + self.dm_oep.append(self.dm) + + if 'LambdaRegulation' in self.constrains: + ws_reg = 2 * einsum( + 'i,ij,j->', + self.b_potential[1], self.Tg, self.b_potential[1], + ) + print('Lambda regulation: %.12e\t%.12e' % (self.Lambda, ws_reg)) + + self.dm_oep = numpy.array(self.dm_oep) + numpy.save('%s/b' % (self.chk_path), self.b_potential) + numpy.save('%s/dm_oep' % (self.chk_path), self.dm_oep) + numpy.save('%s/mo_energy_oep' % (self.chk_path), self.e) + numpy.save('%s/mo_coeff_oep' % (self.chk_path), self.c) + + + def force(self, verbose=False): + return calc_force(self, self.opts, verbose) + + + diff --git a/oep-wy/uwy_force.py b/oep-wy/uwy_force.py new file mode 100644 index 0000000..a9a692e --- /dev/null +++ b/oep-wy/uwy_force.py @@ -0,0 +1,229 @@ +from __future__ import print_function +import numpy + +from pyscf.grad import rks as rks_grad + +from build_matrix import build_vbg1 +from solve_KS import solve_KS +from utility import clean_array, print_mat + + +einsum = numpy.einsum + + +def _HF_elec(mol, dm): + """ + Hellmann-Feynman force, electronic part. + + Args: + mol (Mole): PySCF Mole class. + dm (ndarray): density matrix in AO. + + Returns: + HF force at three directions. + """ + + offsetdic = mol.offset_nr_by_atom() + HF_elec = numpy.zeros([mol.natm, 3]) + + for k, ia in enumerate(range(mol.natm)): + shl0, shl1, p0, p1 = offsetdic[ia] + # mol.set_rinv_origin(mol.atom_coord(ia)) + with mol.with_rinv_as_nucleus(ia): + vrinv = -mol.atom_charge(ia) * mol.intor('int1e_iprinv', comp=3) + vrinv += vrinv.transpose(0, 2, 1) + HF_elec[k] += einsum('xij,ij->x', vrinv, dm) # * 2 + + return HF_elec + + +def _HF_nuc(mol): + """ + Hellmann-Feynman force, nuclear part. + + Args: + mol (Mole): PySCF Mole class. + + Returns: + HF force at three directions. + """ + + HF_nuc = numpy.zeros((mol.natm, 3)) + atom_coords = mol.atom_coords() + Z = mol.atom_charges() + for i in range(mol.natm): + for j in range(mol.natm): + if j == i: continue + Z_pair = Z[i] * Z[j] + + dis_r = numpy.sum((atom_coords[i] - atom_coords[j]) * (atom_coords[i] - atom_coords[j])) + dis_r = numpy.sqrt(dis_r) + dis_r3 = dis_r * dis_r * dis_r + for k in range(3): + HF_nuc[i][k] += Z_pair * (atom_coords[j][k] - atom_coords[i][k]) / dis_r3 + + return HF_nuc + + +def HF_force(mol, dm, debug=False): + HF_elec = _HF_elec(mol, dm) + HF_nuc = _HF_nuc(mol) + + if debug: + print_mat(HF_elec, "HF_elec") + print_mat(HF_nuc, "HF_nuc") + print_mat(HF_elec+HF_nuc, "HF") + + HF_force = HF_elec + HF_nuc + return HF_force + + +# Pulay part +def _make_rdm1e(uwy, dm=None, b_potential=None): + if dm is None: dm = uwy.dm_oep + if b_potential is None: b_potential = uwy.b_potential + + mo0 = uwy.c[0][:, uwy.mo_occ[0]>0] + mo0e = mo0 * (uwy.e[0][uwy.mo_occ[0]>0] * uwy.mo_occ[0][uwy.mo_occ[0]>0]) + dme_rks_a = numpy.dot(mo0e, mo0.T.conj()) + + mo0 = uwy.c[1][:, uwy.mo_occ[1]>0] + mo0e = mo0 * (uwy.e[1][uwy.mo_occ[1]>0] * uwy.mo_occ[0][uwy.mo_occ[1]>0]) + dme_rks_b = numpy.dot(mo0e, mo0.T.conj()) + + dme_rks = numpy.array([dme_rks_a, dme_rks_b]) + + return dm, dme_rks + + +def get_veff1(uwy, g, dm, opts): + """ + Get gradients of the effective potential. + nabla veff = nabla v_0 + nabla v_bg. + + Args: + uwy (WY) : uwy object. + g (obj): PySCF gradient object. + dm (ndarray): density matrix in AO. + opts (dict): OEP options. + + Returns: + Gradients of components of the effective potential. + """ + n = uwy.mol.nelectron + + if opts['ReferencePotential'][0].lower() == 'hfx': + # vj1, vk1 = g.get_jk(dm=uwy.mr.make_rdm1()) + vj1, vk1 = g.get_jk(dm=uwy.dm_hfx) + v01 = vj1[0] + vj1[1] - vk1 + + elif opts['ReferencePotential'][0].lower() == 'fermi-amaldi': + vj1, vk1 = g.get_jk(dm=uwy.dm_fa) + v01 = vj1 * (uwy.mol.nelectron - 1) / uwy.mol.nelectron + v01 = numpy.array([v01, v01]) + + elif opts['ReferencePotential'][0].lower() == 'hfx-fa': + vj1, vk1 = g.get_jk(dm=uwy.dm_hfx) + v01a = vj1[0] + vj1[1] - vk1 + v01a = v01a[0] + vj1, vk1 = g.get_jk(dm=uwy.dm_fa) + v01b = vj1 * (uwy.mol.nelectron - 1) / uwy.mol.nelectron + v01 = numpy.array([v01a, v01b]) + + elif opts['ReferencePotential'][0].lower() == 'sfa': + vj1, vk1 = g.get_jk(dm=uwy.dm_fa) + v01 = vj1 * uwy.sfa_factor + v01 = numpy.array([v01, v01]) + + elif opts['ReferencePotential'][0].lower() == 'shfx': + vj1, vk1 = g.get_jk(dm=uwy.dm_hfx) + v01 = vj1[0] + vj1[1] - vk1 * uwy.shfx_factor + # v01 *= uwy.shfx_factor + + + else: + raise NotImplementedError + + vbg1 = numpy.array([ + build_vbg1(uwy.b_potential[0], uwy.integrals_3c1e_ip_ovlp), + build_vbg1(uwy.b_potential[1], uwy.integrals_3c1e_ip_ovlp), + ]) + + return v01, vbg1 + + +def Pulay_force(uwy, g, opts, dm, dme, debug=False): + h1 = g.get_hcore() + # h1 = (h1 + h1.transpose(0, 2, 1)) * 0.5 + s1 = g.get_ovlp() + + v01, vbg1 = get_veff1(uwy, g, dm, opts) + veff1 = v01 + vbg1 + f1 = h1 + veff1 + + dme_sf = dme[0] + dme[1] + dm_sf = dm[0] + dm[1] + + offsetdic = uwy.mol.offset_nr_by_atom() + + Pulay_tf = numpy.zeros([uwy.mol.natm, 3]) + Pulay_ts = numpy.zeros([uwy.mol.natm, 3]) + if debug: + th = numpy.zeros([uwy.mol.natm, 3]) + t0 = numpy.zeros([uwy.mol.natm, 3]) + tbg = numpy.zeros([uwy.mol.natm, 3]) + + for ia in range(uwy.mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + Pulay_tf[ia] += einsum('sxij,sij->x', f1[:, :, p0:p1], dm[:, p0:p1]) * 2 + Pulay_ts[ia] -= einsum('xij,ij->x', s1[:, p0:p1], dme_sf[p0:p1]) * 2 + + if debug: + th[ia] += einsum('xij,ij->x', h1[:, p0:p1], dm_sf[p0:p1]) * 2 + t0[ia] += einsum('sxij,sij->x', v01[:, :, p0:p1], dm[:, p0:p1]) * 2 + tbg[ia] += einsum('sxij,sij->x', vbg1[:, :, p0:p1], dm[:, p0:p1]) * 2 + + if debug: + print_mat(th, 'Pulay_th') + print_mat(t0, 'Pulay_t0') + print_mat(tbg, 'Pulay_tbg') + print_mat(Pulay_tf, 'Pulay_tf') + print_mat(Pulay_ts, 'Pulay_ts') + print_mat(Pulay_tf+Pulay_ts, 'Pulay') + + return Pulay_tf + Pulay_ts + + +def calc_force(uwy, opts, debug=False): + debug = True + g = rks_grad.Gradients(uwy.mr) + ## if opts['ReferencePotential'][0].lower() == 'hfx': + ## g = rks_grad.Gradients(uwy.mr) + + ## elif opts['ReferencePotential'][0].lower() == 'fermi-amaldi': + ## g = rks_grad.Gradients(uwy.mr) + ## + ## elif opts['ReferencePotential'][0].lower() == 'hfx-fa': + ## g = rks_grad.Gradients(uwy.mr) + + ## else: + ## raise NotImplementedError + + HF = HF_force(uwy.mol, uwy.dm_oep[0]+uwy.dm_oep[1], debug) + + dm_rks, dme_rks = _make_rdm1e(uwy) + Pulay = Pulay_force(uwy, g, opts, dm_rks, dme_rks, debug) + + return HF + Pulay + + +def Pulay_term(uwy, v1, dm): + t = numpy.zeros([uwy.mol.natm, 3]) + offsetdic = uwy.mol.offset_nr_by_atom() + for ia in range(uwy.mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + t[ia] += einsum('xij,ij->x', v1[:, p0:p1], dm[p0:p1]) * 2 + return t + + + diff --git a/oep-wy/wy.py b/oep-wy/wy.py new file mode 100644 index 0000000..32753aa --- /dev/null +++ b/oep-wy/wy.py @@ -0,0 +1,234 @@ +from __future__ import print_function, division +import numpy +import os, os.path +from pyscf import gto, scf, dft, cc + +from basis import get_integrals_3c1e, get_integrals_3c1e_ip_ovlp, get_overlap_g, get_kinetic_g +from IO import parse_str +from wy_force import calc_force +from search import search + +einsum = numpy.einsum + +class WY: + """ + Basis class to handle the WY method. + """ + + def __init__(self, opts): + self.opts = opts + self.chk_path = opts['CheckPointPath'] + + self._generate_mol(opts['Structure'], opts['OrbitalBasis']) + self._get_basis_info(opts['OrbitalBasis'], opts['PotentialBasis']) + self._get_fixed_matrix(opts['ReferencePotential'], opts['CheckPointPath']) + + self._get_input_dm(opts['InputDensity']) + self._get_init_coefficient(opts['PotentialCoefficientInit']) + + + # computation options + self.oep_max_iter = opts['MaxIterator'] + self.oep_crit = opts['ConvergenceCriterion'] + self.svd_cutoff = opts['SVDCutoff'] + self.Lambda = opts['LambdaRegulation'] + self.force_v0 = 0. + self.constrains = list() + if self.Lambda > 0: self.constrains.append('LambdaRegulation') + if opts['ZeroForceConstrain']: self.constrains.append('ZeroForce') + + + def _generate_mol(self, fn, basis): + atom_list, atom_str, charge, spin = parse_str(fn) + + self.mol = gto.M( + atom=atom_str, + basis=basis, + charge=charge, + spin=spin) + + n_elec = self.mol.nelectron + n_ao = self.mol.nao_nr() + self.mo_occ = numpy.zeros(n_ao) + self.mo_occ[:n_elec//2] = 2 + self.n_occ = n_elec//2 + + self.mf = scf.RHF(self.mol) + self.mr = scf.RKS(self.mol) + + print('Structure info:') + for a in self.mol._atom: + print('%2s\t%+12.8e\t%+12.8e\t%+12.8e AA' % + (a[0], a[1][0], a[1][1], a[1][2])) + print('charge = %d\nspin = %d' % (self.mol.charge, self.mol.spin)) + # END of _generate_mol() + + + def _get_basis_info(self, orb_basis, pot_basis): + mol = self.mol + atoms = [mol.atom_symbol(i) for i in range(mol.natm)] + + res = get_integrals_3c1e( + mol, atoms, + orb_basis, pot_basis) + self.orbital_basis = res[0] + self.potential_basis = res[1] + self.concatenate_basis = res[2] + self.integrals_3c1e_ovlp = res[3] + + res = get_integrals_3c1e_ip_ovlp( + mol, atoms, + orb_basis, pot_basis) + self.integrals_3c1e_ip_ovlp = res[3] + + self.nbas_orbital = 0 + self.nbas_potential = 0 + self.nbas_orbital_atom = numpy.zeros(len(atoms), dtype=int) + self.nbas_potential_atom = numpy.zeros(len(atoms), dtype=int) + + for i, atom in enumerate(atoms): + for basis in self.orbital_basis[atom]: + self.nbas_orbital += basis[0] * 2 + 1 + self.nbas_orbital_atom[i] += basis[0] * 2 + 1 + if len(basis[1]) > 2: + self.nbas_orbital += basis[0] * 2 + 1 + self.nbas_orbital_atom[i] += basis[0] * 2 + 1 + for basis in self.potential_basis[atom]: + self.nbas_potential += basis[0] * 2 + 1 + self.nbas_potential_atom[i] += basis[0] * 2 + 1 + if len(basis[1]) > 2: + self.nbas_potential += basis[0] * 2 + 1 + self.nbas_potential_atom[i] += basis[0] * 2 + 1 + + self.Sg = get_overlap_g(self.mol, + self.concatenate_basis, + self.nbas_orbital_atom, + self.nbas_potential_atom) + self.Tg = get_kinetic_g(self.mol, + self.concatenate_basis, + self.nbas_orbital_atom, + self.nbas_potential_atom) + + self.aux_mol = self.mol.copy() + self.aux_mol.basis = self.concatenate_basis + self.aux_mol.build() + + # mr = scf.RKS(self.mol) + self.mr.grids.build() + self.orb_ao_value = dft.numint.eval_ao(self.mol, self.mr.grids.coords, deriv=1) + self.concatenate_ao_value = dft.numint.eval_ao(self.aux_mol, self.mr.grids.coords, deriv=1) + self.pot_ao_value = numpy.empty([4, len(self.mr.grids.coords), self.nbas_potential]) + ptr_orb = 0 + ptr_pot = 0 + for i in range(self.mol.natm): + ptr_orb_inc = self.nbas_orbital_atom[i] + ptr_pot_inc = self.nbas_potential_atom[i] + self.pot_ao_value[:, :, ptr_pot:ptr_pot+ptr_pot_inc] = \ + self.concatenate_ao_value[:, :, ptr_orb+ptr_orb_inc:ptr_orb+ptr_orb_inc+ptr_pot_inc] + ptr_orb += ptr_orb_inc + ptr_pot_inc + ptr_pot += ptr_pot_inc + # END of _get_basis_info() + + + def _get_fixed_matrix(self, ref_pot, chk_path): + mol = self.mol + self.S = mol.intor('int1e_ovlp_sph') + self.T = mol.intor('cint1e_kin_sph') + self.vn = mol.intor('cint1e_nuc_sph') + + if ref_pot[0].lower() == 'hfx': + self.reference_potential = 'hfx' + print("Use HFX reference potential") + self.mr.xc = 'hf,' + if os.path.isfile('%s/dm_hfx.npy' % (chk_path)): + print("Load dm from %s/dm_hfx.npy" % (chk_path)) + dm_hfx = numpy.load('%s/dm_hfx.npy' % (chk_path)) + self.mr.kernel(dm0=dm_hfx) + else: + self.mr.kernel() + dm_hfx = self.mr.make_rdm1() + print("Save dm to %s/dm_hfx.npy" % (chk_path)) + numpy.save('%s/dm_hfx' % (chk_path), dm_hfx) + numpy.save('%s/dm_rks_%s' % (chk_path, self.mr.xc), dm_hfx) + from pyscf import dft + self.v0 = dft.rks.get_veff(self.mr, self.mol, dm_hfx) + + elif ref_pot[0].lower() == 'fermi-amaldi': + self.reference_potential = 'fermi-amaldi' + print("Use the Fermi-Amaldi reference potential") + self.dm_fa = numpy.load(ref_pot[1]) + from pyscf.scf import jk + self.v0 = jk.get_jk(mol, self.dm_fa)[0] * (mol.nelectron - 1) / mol.nelectron + + else: + raise NotImplementedError + + self.H = self.T + self.vn + self.v0 + # END of _get_fixed_matrix() + + + def _get_input_dm(self, input_dm): + if input_dm[0].lower() == 'none': + self.mf.kernel() + self.dm_rhf = self.mf.make_rdm1() + numpy.save('%s/dm_rhf' % (self.chk_path), self.dm_rhf) + c = self.mf.mo_coeff + + self.mcc = cc.CCSD(self.mf) + ecc, t1, t2 = self.mcc.kernel() + rdm1 = self.mcc.make_rdm1() + self.dm_ccsd = einsum('pi,ij,qj->pq', c, rdm1, c.conj()) + self.dm_in = self.dm_ccsd + numpy.save('%s/dm_ccsd' % (self.chk_path), self.dm_ccsd) + + elif input_dm[0].lower() == 'load': + # dm sequence: + # targer (ccsd), rhf, rks + l = len(input_dm) + self.dm_ccsd = numpy.load(input_dm[1]) + self.dm_in = self.dm_ccsd + if l > 2: self.dm_rhf = numpy.load(input_dm[2]) + if l > 3: self.dm_rks = numpy.load(input_dm[3]) + else: + self.dm_in = None + self.dm_ccsd = None + self.dm_rhf = None + # END of _get_input_dm() + + + def _get_init_coefficient(self, b_init): + if b_init[0].lower() == 'zeros': + self.b_init = numpy.zeros(self.nbas_potential) + print('Use zero initial values for b.') + elif b_init[0].lower() == 'load': + print('Load initial values for b from %s' % (b_init[1])) + if b_init[1].endswith('.npy'): + self.b_init = numpy.load(b_init[1]) + else: + self.b_init = numpy.loadtxt(b_init[1]) + else: + raise NotImplementedError + + # END of _get_init_coefficient() + + + def OEP(self): + search(self) + + if 'LambdaRegulation' in self.constrains: + ws_reg = 2 * einsum( + 'i,ij,j->', + self.b_potential, self.Tg, self.b_potential, + ) + print('Lambda regulation: %.12e\t%.12e' % (self.Lambda, ws_reg)) + + self.dm_oep = self.dm + numpy.save('%s/b' % (self.chk_path), self.b_potential) + numpy.save('%s/dm_oep' % (self.chk_path), self.dm_oep) + + + def force(self, verbose=False): + return calc_force(self, self.opts, verbose) + + + diff --git a/oep-wy/wy_force.py b/oep-wy/wy_force.py new file mode 100644 index 0000000..e012e2e --- /dev/null +++ b/oep-wy/wy_force.py @@ -0,0 +1,192 @@ +from __future__ import print_function +import numpy + +from pyscf.grad import rks as rks_grad + +from build_matrix import build_vbg1 +from solve_KS import solve_KS +from utility import clean_array, print_mat + + +einsum = numpy.einsum + + +def _HF_elec(mol, dm): + """ + Hellmann-Feynman force, electronic part. + + Args: + mol (Mole): PySCF Mole class. + dm (ndarray): density matrix in AO. + + Returns: + HF force at three directions. + """ + + offsetdic = mol.offset_nr_by_atom() + HF_elec = numpy.zeros([mol.natm, 3]) + + for k, ia in enumerate(range(mol.natm)): + shl0, shl1, p0, p1 = offsetdic[ia] + mol.set_rinv_origin(mol.atom_coord(ia)) + vrinv = -mol.atom_charge(ia) * mol.intor('int1e_iprinv', comp=3) + HF_elec[k] += einsum("xij,ij->x", vrinv, dm) * 2 + + return HF_elec + + +def _HF_nuc(mol): + """ + Hellmann-Feynman force, nuclear part. + + Args: + mol (Mole): PySCF Mole class. + + Returns: + HF force at three directions. + """ + + HF_nuc = numpy.zeros((mol.natm, 3)) + atom_coords = mol.atom_coords() + Z = mol.atom_charges() + for i in range(mol.natm): + for j in range(mol.natm): + if j == i: continue + Z_pair = Z[i] * Z[j] + + dis_r = numpy.sum((atom_coords[i] - atom_coords[j]) * (atom_coords[i] - atom_coords[j])) + dis_r = numpy.sqrt(dis_r) + dis_r3 = dis_r * dis_r * dis_r + for k in range(3): + HF_nuc[i][k] += Z_pair * (atom_coords[j][k] - atom_coords[i][k]) / dis_r3 + + return HF_nuc + + +def HF_force(mol, dm, debug=False): + HF_elec = _HF_elec(mol, dm) + HF_nuc = _HF_nuc(mol) + + if debug: + print_mat(HF_elec, "HF_elec") + print_mat(HF_nuc, "HF_nuc") + print_mat(HF_elec+HF_nuc, "HF") + + HF_force = HF_elec + HF_nuc + return HF_force + + +# Pulay part +def _make_rdm1e(wy, dm=None, b_potential=None): + if dm is None: dm = wy.dm_oep + if b_potential is None: b_potential = wy.b_potential + + # clean_array(b_potential) + # e, c, dm_rks, vbg = solve_KS( + # wy.b_potential, wy.integrals_3c1e_ovlp, + # wy.H, wy.S, wy.mo_occ) + + mo0 = wy.c[:, wy.mo_occ>0] + mo0e = mo0 * (wy.e[wy.mo_occ>0] * wy.mo_occ[wy.mo_occ>0]) + dme_rks = numpy.dot(mo0e, mo0.T.conj()) + + return dm, dme_rks + + +def get_veff1(wy, g, dm, opts): + """ + Get gradients of the effective potential. + nabla veff = nabla v_0 + nabla v_bg. + + Args: + wy (WY) : wy object. + g (obj): PySCF gradient object. + dm (ndarray): density matrix in AO. + opts (dict): OEP options. + + Returns: + Gradients of components of the effective potential. + """ + n = wy.mol.nelectron + + if opts['ReferencePotential'][0].lower() == 'hfx': + vj1, vk1 = g.get_jk(dm=wy.mr.make_rdm1()) + v01 = vj1 - vk1 * 0.5 + + elif opts['ReferencePotential'][0].lower() == 'fermi-amaldi': + vj1, vk1 = g.get_jk(dm=wy.dm_fa) + v01 = vj1 * (wy.mol.nelectron - 1) / wy.mol.nelectron + else: + raise NotImplementedError + + vbg1 = build_vbg1(wy.b_potential, wy.integrals_3c1e_ip_ovlp) + + return v01, vbg1 + + +def Pulay_force(wy, g, opts, dm, dme, debug=False): + h1 = g.get_hcore() + s1 = g.get_ovlp() + + v01, vbg1 = get_veff1(wy, g, dm, opts) + veff1 = v01 + vbg1 + f1 = h1 + veff1 + + offsetdic = wy.mol.offset_nr_by_atom() + + Pulay_tf = numpy.zeros([wy.mol.natm, 3]) + Pulay_ts = numpy.zeros([wy.mol.natm, 3]) + if debug: + th = numpy.zeros([wy.mol.natm, 3]) + t0 = numpy.zeros([wy.mol.natm, 3]) + tbg = numpy.zeros([wy.mol.natm, 3]) + + for ia in range(wy.mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + Pulay_tf[ia] += einsum('xij,ij->x', f1[:, p0:p1], dm[p0:p1]) * 2 + Pulay_ts[ia] -= einsum('xij,ij->x', s1[:, p0:p1], dme[p0:p1]) * 2 + + if debug: + th[ia] += einsum('xij,ij->x', h1[:, p0:p1], dm[p0:p1]) * 2 + t0[ia] += einsum('xij,ij->x', v01[:, p0:p1], dm[p0:p1]) * 2 + tbg[ia] += einsum('xij,ij->x', vbg1[:, p0:p1], dm[p0:p1]) * 2 + + if debug: + print_mat(th, 'Pulay_th') + print_mat(t0, 'Pulay_t0') + print_mat(tbg, 'Pulay_tbg') + print_mat(Pulay_tf, 'Pulay_tf') + print_mat(Pulay_ts, 'Pulay_ts') + print_mat(Pulay_tf+Pulay_ts, 'Pulay') + + return Pulay_tf + Pulay_ts + + +def calc_force(wy, opts, debug=False): + debug = False + g = rks_grad.Gradients(wy.mr) + + if opts['ReferencePotential'][0].lower() in ['hfx', 'fermi-amaldi']: + g = rks_grad.Gradients(wy.mr) + + else: + raise NotImplementedError + + HF = HF_force(wy.mol, wy.dm_oep, debug) + + dm_rks, dme_rks = _make_rdm1e(wy) + Pulay = Pulay_force(wy, g, opts, dm_rks, dme_rks, debug) + + return HF + Pulay + + +def Pulay_term(wy, v1, dm): + t = numpy.zeros([wy.mol.natm, 3]) + offsetdic = wy.mol.offset_nr_by_atom() + for ia in range(wy.mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + t[ia] += einsum('xij,ij->x', v1[:, p0:p1], dm[p0:p1]) * 2 + return t + + + diff --git a/xcnn/Config.py b/xcnn/Config.py new file mode 100644 index 0000000..39a1167 --- /dev/null +++ b/xcnn/Config.py @@ -0,0 +1,45 @@ +import configparser + + +def _get_typed_arg(f, key, fallback=None, tolist=False): + v = f(key, fallback=fallback) + if v.__class__.__name__ == 'unicode': v = str(v) + if tolist: v = v.split() + return v + + +def parse_xcnn_options(sec): + xcnn_opts = dict() + xcnn_opts['Verbose'] = _get_typed_arg(sec.getboolean, 'Verbose', fallback=True) + xcnn_opts['CheckPointPath'] = _get_typed_arg(sec.get, 'CheckPointPath', fallback='.') + xcnn_opts['EnableCuda'] = _get_typed_arg(sec.getboolean, 'EnableCuda', fallback=True) + + xcnn_opts['Structure'] = _get_typed_arg(sec.get, 'Structure') + xcnn_opts['OrbitalBasis'] = _get_typed_arg(sec.get, 'OrbitalBasis') + xcnn_opts['ReferencePotential'] = _get_typed_arg(sec.get, 'ReferencePotential', fallback='hfx', tolist=True) + + xcnn_opts['Model'] = _get_typed_arg(sec.get, 'Model') + xcnn_opts['ModelPath'] = _get_typed_arg(sec.get, 'ModelPath') + + xcnn_opts['MeshLevel'] = _get_typed_arg(sec.getint, 'MeshLevel', fallback=3) + xcnn_opts['CubeLength'] = _get_typed_arg(sec.getfloat, 'CubeLength', fallback=0.9) + xcnn_opts['CubePoint'] = _get_typed_arg(sec.getint, 'CubePoint', fallback=9) + xcnn_opts['Symmetric'] = _get_typed_arg(sec.get, 'Symmetric', fallback=None) + + xcnn_opts['InitDensityMatrix'] = _get_typed_arg(sec.get, 'InitDensityMatrix', fallback='rks') + xcnn_opts['xcFunctional'] = _get_typed_arg(sec.get, 'xcFunctional', fallback='b3lypg') + xcnn_opts['ConvergenceCriterion'] = _get_typed_arg(sec.getfloat, 'ConvergenceCriterion', fallback=1e-6) + xcnn_opts['MaxIteration'] = _get_typed_arg(sec.getint, 'MaxIteration', fallback=99) + + xcnn_opts['ZeroForceConstrain'] = _get_typed_arg(sec.getboolean, 'ZeroForceConstrain', fallback=True) + xcnn_opts['ZeroTorqueConstrain'] = _get_typed_arg(sec.getboolean, 'ZeroTorqueConstrain', fallback=False) + + return xcnn_opts + + +def get_options(config_file, sec): + config = configparser.ConfigParser() + config.read(config_file) + return parse_xcnn_options(config['XCNN']) + + diff --git a/xcnn/H2/CNN_GGA_1_zsym_2018-09-21_15:38:55.363102.dat.restart11000 b/xcnn/H2/CNN_GGA_1_zsym_2018-09-21_15:38:55.363102.dat.restart11000 new file mode 100644 index 0000000..53eadf2 Binary files /dev/null and b/xcnn/H2/CNN_GGA_1_zsym_2018-09-21_15:38:55.363102.dat.restart11000 differ diff --git a/xcnn/H2/coords_nn.npy b/xcnn/H2/coords_nn.npy new file mode 100644 index 0000000..a4995a0 Binary files /dev/null and b/xcnn/H2/coords_nn.npy differ diff --git a/xcnn/H2/d0700.cfg b/xcnn/H2/d0700.cfg new file mode 100644 index 0000000..31e11d9 --- /dev/null +++ b/xcnn/H2/d0700.cfg @@ -0,0 +1,24 @@ +[XCNN] +Verbose = True +CheckPointPath = H2 +EnableCube = True + +Structure = H2/d0700.str +OrbitalBasis = aug-cc-pVQZ +ReferencePotential = hfx + +Model = cnn_gga_1 +ModelPath = H2/CNN_GGA_1_zsym_2018-09-21_15:38:55.363102.dat.restart11000 + +MeshLevel = 3 +CubeLength = 0.9 +CubePoint = 9 +Symmetric = xz + +//InitDensityMatrix = rks +InitDensityMatrix = load H2/dm_init.npy +xcFunctional = b3lypg +ConvergenceCriterion = 1.e-6 +MaxIteration = 99 +ZeroForceConstrain = True + diff --git a/xcnn/H2/d0700.str b/xcnn/H2/d0700.str new file mode 100644 index 0000000..f3a6097 --- /dev/null +++ b/xcnn/H2/d0700.str @@ -0,0 +1,7 @@ +2 +H 0 0 +0.35000 +H 0 0 -0.35000 +0 0 + +# H2 distance = 0.70000 + diff --git a/xcnn/H2/dm_ccsd.npy b/xcnn/H2/dm_ccsd.npy new file mode 100644 index 0000000..1665c4e Binary files /dev/null and b/xcnn/H2/dm_ccsd.npy differ diff --git a/xcnn/H2/dm_hfx.npy b/xcnn/H2/dm_hfx.npy new file mode 100644 index 0000000..73efe75 Binary files /dev/null and b/xcnn/H2/dm_hfx.npy differ diff --git a/xcnn/H2/dm_init.npy b/xcnn/H2/dm_init.npy new file mode 100644 index 0000000..7f13fc6 Binary files /dev/null and b/xcnn/H2/dm_init.npy differ diff --git a/xcnn/H2/dm_nn.npy b/xcnn/H2/dm_nn.npy new file mode 100644 index 0000000..a558c91 Binary files /dev/null and b/xcnn/H2/dm_nn.npy differ diff --git a/xcnn/H2/dm_rks_b3lypg.npy b/xcnn/H2/dm_rks_b3lypg.npy new file mode 100644 index 0000000..ee3ffc8 Binary files /dev/null and b/xcnn/H2/dm_rks_b3lypg.npy differ diff --git a/xcnn/H2/dm_rks_hf,.npy b/xcnn/H2/dm_rks_hf,.npy new file mode 100644 index 0000000..73efe75 Binary files /dev/null and b/xcnn/H2/dm_rks_hf,.npy differ diff --git a/xcnn/I.py b/xcnn/I.py new file mode 100644 index 0000000..e616af0 --- /dev/null +++ b/xcnn/I.py @@ -0,0 +1,45 @@ +from __future__ import print_function +import numpy +import sys +from pyscf import gto, scf + +from xcnn.io.config import get_options +from xcnn.io.read_structure import read_structure +from xcnn.post_dft.nnks import NNKS +from xcnn.post_dft.model import * +from xcnn.utility.ccsd import ccsd +from xcnn.tools.compare_rho import compare_rho + +from compare_density import compare_density + + +def main(): + mol = gto.M(atom=sys.argv[1], basis="augccpvqz", charge=int(sys.argv[2]), spin=0) + mr = scf.RKS(mol) + mr.xc = "B3LYPG" + mr.run() + dm_rks = mr.make_rdm1() + + dm_cc, _ = ccsd(mol) + dms = [numpy.load(fn) for fn in sys.argv[3:]] + dms.insert(0, dm_cc) + dms.insert(1, dm_rks) + labels = sys.argv[3:] + labels.insert(0, "cc") + labels.insert(1, "b3lypg") + + mr = scf.RKS(mol) + mr.xc = "B3LYPG" + mr.grids.build() + dms = numpy.array(dms) + print("======== I ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "I", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + +if __name__ == "__main__": + main() + diff --git a/xcnn/IO.py b/xcnn/IO.py new file mode 100644 index 0000000..1ab3364 --- /dev/null +++ b/xcnn/IO.py @@ -0,0 +1,48 @@ +from __future__ import print_function +import numpy as np + + +def parse_str(fn): + """ + str file uses a format similar to .xyz file. + + Line 1 number of atoms + Line 2 atom x y z [AA] + Line 3 atom x y z [AA] + ... + Line N atom x y z [AA] + Line N+1 charge spin + + The `spin' follows the definition in PySCF, + equalling to N(alpha)-N(beta) + The last line is OPTIONAL. + If not provided, the default value is 0, 0 + """ + atom_list = list() + atom_str = '' + with open(fn) as fp: + n = int(fp.readline()) + for i in range(n): + ss = fp.readline().split() + atom_list.append(ss[0]) + atom_str += "%s %16.8e %16.8e %16.8e; " % (ss[0], float(ss[1]), float(ss[2]), float(ss[3])) + + ss = fp.readline().split() + if len(ss) > 0: + charge, spin = int(ss[0]), int(ss[1]) + else: + charge, spin = 0, 0 + + return atom_list, atom_str, charge, spin + + +def _load_density(fn): + if fn.endswith('npy'): + return np.load(fn) + else: + return np.loadtxt(fn) + + +def load_density(fns): + return [_load_density[f] for f in fns] + diff --git a/xcnn/I_basis.py b/xcnn/I_basis.py new file mode 100644 index 0000000..ae0e45e --- /dev/null +++ b/xcnn/I_basis.py @@ -0,0 +1,43 @@ +from __future__ import print_function +import numpy +import sys +from pyscf import gto, scf + +from xcnn.io.config import get_options +from xcnn.io.read_structure import read_structure +from xcnn.post_dft.nnks import NNKS +from xcnn.post_dft.model import * +from xcnn.utility.ccsd import ccsd +from xcnn.tools.compare_rho import compare_rho + +from compare_density import compare_density + + +def main(): + mol = gto.M(atom=sys.argv[1], basis=sys.argv[3], charge=int(sys.argv[2]), spin=0) + mr = scf.RKS(mol) + mr.xc = "B3LYPG" + mr.grids.build() + # mr.run() + # dm_rks = mr.make_rdm1() + + # dm_cc, _ = ccsd(mol) + dms = [numpy.load(fn) for fn in sys.argv[4:]] + # dms.insert(0, dm_cc) + # dms.insert(1, dm_rks) + labels = sys.argv[4:] + # labels.insert(0, "cc") + # labels.insert(1, "b3lypg") + + dms = numpy.array(dms) + print("======== I ========") + for i, dm in enumerate(dms[0:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "I", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i], numerator, denominator, numerator / denominator)) + + +if __name__ == "__main__": + main() + diff --git a/xcnn/Is.py b/xcnn/Is.py new file mode 100644 index 0000000..241dd2b --- /dev/null +++ b/xcnn/Is.py @@ -0,0 +1,37 @@ +from __future__ import print_function +import numpy +import sys +from pyscf import gto, scf + +from xcnn.io.config import get_options +from xcnn.io.read_structure import read_structure +from xcnn.post_dft.nnks import NNKS +from xcnn.post_dft.model import * +from xcnn.utility.ccsd import ccsd +from xcnn.tools.compare_rho import compare_rho + +from compare_density import compare_density + + +def main(): + mol = gto.M(atom=sys.argv[1], basis="augccpvqz", charge=int(sys.argv[2]), spin=0) + mr = scf.RKS(mol) + mr.grids.build() + # mr.run() + + dms = [numpy.load(fn) for fn in sys.argv[3:]] + + dms = numpy.array(dms) + print("======== I ========") + for i in range(len(dms)): + for j in range(len(dms)): + numerator, denominator = compare_density( + mol, dms[i], dms[j], mr.grids, "I", + full_output=True) + # print("%6s - %6s: %16.8e / %16.8e = %16.8e " % (sys.argv[i+3].split("/")[-2], sys.argv[j+3].split("/")[-2], numerator, denominator, numerator / denominator)) + print("%6s - %6s: %16.8e / %16.8e = %16.8e " % (sys.argv[i+3], sys.argv[j+3], numerator, denominator, numerator / denominator)) + + +if __name__ == "__main__": + main() + diff --git a/xcnn/compare_density.py b/xcnn/compare_density.py new file mode 100644 index 0000000..75c1072 --- /dev/null +++ b/xcnn/compare_density.py @@ -0,0 +1,429 @@ +from __future__ import print_function +import numpy as np +from pyscf import gto, scf, dft + + +def eval_rho(mol, dm, coords, deriv=0, xctype="LDA"): + ao_value = dft.numint.eval_ao(mol, coords, deriv=deriv) + rhos = dft.numint.eval_rho(mol, ao_value, dm, xctype=xctype) + return rhos + + +def float2str(v): + return "%+16.8e" % (v) + + +def _calculate_I_space_resolve(mol, dm0, dm1, coords, blk_size=1000, coord_system="cart"): + # Bochevarov, A. D., et al. J. Chem. Phys., 128, 034102 (2008) + # The densities produced by the density functional theory: + # Comparison to full configuration interaction + # Eqn 2.2 + # return density difference on grid points rather than integrated result + # + # coord_system == "cyl": cylinder coordinate system + # dxdydz = rdr d\theta dz + + if coord_system != "cyl": + raise NotImplementedError + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + I = np.zeros([total_length], dtype=np.float) + accumulated_I = np.zeros([total_length], dtype=np.float) + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = rho0 - rho1 + + I[index] = drho * drho + if coord_system == "cyl": + accumulated_I[index] = drho * drho * coords[index, 0] + + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = rho0 - rho1 + + I[-res:] = drho * drho + if coord_system == "cyl": + accumulated_I[-res:] = drho * drho * coords[-res:, 0] + + return I, accumulated_I + + +def _calculate_I(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + # Bochevarov, A. D., et al. J. Chem. Phys., 128, 034102 (2008) + # The densities produced by the density functional theory: + # Comparison to full configuration interaction + # Eqn 2.2 + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[index]) + denominator += np.sum(rho1 * rho1 * weights[index]) + + numerator += np.sum(drho * drho * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[-res:]) + denominator += np.sum(rho1 * rho1 * weights[-res:]) + + numerator += np.sum(drho * drho * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_rms2(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + # Bochevarov, A. D., et al. J. Chem. Phys., 128, 034102 (2008) + # The densities produced by the density functional theory: + # Comparison to full configuration interaction + # Eqn 2.3 + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = float(total_length) + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = rho0 - rho1 + + numerator += np.sum(drho * drho) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = rho0 - rho1 + + numerator += np.sum(drho * drho) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_wI1(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + # Bochevarov, A. D., et al. J. Chem. Phys., 128, 034102 (2008) + # The densities produced by the density functional theory: + # Comparison to full configuration interaction + # modified version of Eqn 2.2 + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[index]) + denominator += np.sum(rho1 * rho1 * weights[index]) + + numerator += np.sum(drho * drho * rho1 * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[-res:]) + denominator += np.sum(rho1 * rho1 * weights[-res:]) + + numerator += np.sum(drho * drho * rho1 * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_wI2(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + # Bochevarov, A. D., et al. J. Chem. Phys., 128, 034102 (2008) + # The densities produced by the density functional theory: + # Comparison to full configuration interaction + # modified version of Eqn 2.2 + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[index]) + denominator += np.sum(rho1 * rho1 * weights[index]) + + numerator += np.sum(drho * drho * rho1 * rho1 * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = rho0 - rho1 + + denominator += np.sum(rho0 * rho0 * weights[-res:]) + denominator += np.sum(rho1 * rho1 * weights[-res:]) + + numerator += np.sum(drho * drho * rho1 * rho1 * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_mad(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[index]) + denominator += np.sum(rho1 * weights[index]) + + numerator += np.sum(drho * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[-res:]) + denominator += np.sum(rho1 * weights[-res:]) + + numerator += np.sum(drho * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_wmad(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[index]) + denominator += np.sum(rho1 * weights[index]) + + numerator += np.sum(drho * rho1 * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[-res:]) + denominator += np.sum(rho1 * weights[-res:]) + + numerator += np.sum(drho * rho1 * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_wmad2(mol, dm0, dm1, grids, blk_size=1000, full_output=False): + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + numerator = 0. + denominator = 0. + + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho0 = eval_rho(mol, dm0, coords[index]) + rho1 = eval_rho(mol, dm1, coords[index]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[index]) + denominator += np.sum(rho1 * weights[index]) + + numerator += np.sum(drho * rho1 * rho1 * weights[index]) + + if res > 0: + rho0 = eval_rho(mol, dm0, coords[-res:]) + rho1 = eval_rho(mol, dm1, coords[-res:]) + drho = np.abs(rho0 - rho1) + + denominator += np.sum(rho0 * weights[-res:]) + denominator += np.sum(rho1 * weights[-res:]) + + numerator += np.sum(drho * rho1 * rho1 * weights[-res:]) + + if full_output: + return numerator, denominator + else: + return numerator / denominator + return + + +def _calculate_N(mol, dm, grids, blk_size=1000): + # calculate total number of electrons. + # N = \int \rho(r) dr + + coords = grids.coords + weights = grids.weights + + total_length = len(coords) + n_blk = total_length / blk_size + res = total_length - n_blk * blk_size + + N = 0. + for iBlk in range(n_blk): + index = slice(iBlk*blk_size, (iBlk+1)*blk_size) + + rho = eval_rho(mol, dm, coords[index]) + N += np.sum(rho * weights[index]) + + if res > 0: + rho = eval_rho(mol, dm, coords[-res:]) + N += np.sum(rho * weights[-res:]) + + return N + + +def compare_density(mol, dm0, dm1, grids, cmp_value, blk_size=1000, full_output=False): + if cmp_value == "I": + return _calculate_I(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "Is": + return _calculate_I_space_resolve(mol, dm0, dm1, grids, blk_size=blk_size, coord_system="cyl") + elif cmp_value == "wI1": + return _calculate_wI1(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "wI2": + return _calculate_wI2(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "N": + return _calculate_N(mol, dm0, grids, blk_size=blk_size) + elif cmp_value == "rms2": + return _calculate_rms2(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "mad": + return _calculate_mad(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "wmad": + return _calculate_wmad(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + elif cmp_value == "wmad2": + return _calculate_wmad2(mol, dm0, dm1, grids, blk_size=blk_size, full_output=full_output) + else: + raise NotImplementedError + +def main(): + mol = gto.M(atom="H 0 0 +0.25; H 0 0 -0.25", basis="augccpvqz") + mf = scf.RKS(mol) + mf.grids.level = 9 + mf.grids.build() + + dm_ccsd = np.load("dm_ccsd.npy") + dm_rks = np.load("dm_rks_LDA.npy") + dm_nn = np.load("dm_iter_08.npy") + + print("N CCSD", compare_density(mol, dm_ccsd, None, mf.grids, "N")) + print("N RKS", compare_density(mol, dm_rks, None, mf.grids, "N")) + print("N NN", compare_density(mol, dm_nn, None, mf.grids, "N")) + + numerator, denominator = compare_density( + mol, dm_rks, dm_ccsd, mf.grids, "I", + full_output=True) + print("RKS vs CCSD", numerator, denominator) + + numerator, denominator = compare_density( + mol, dm_nn, dm_ccsd, mf.grids, "I", + full_output=True) + print("NN vs CCSD", numerator, denominator) + +if __name__ == "__main__": + main() + diff --git a/xcnn/compare_v_nn.py b/xcnn/compare_v_nn.py new file mode 100644 index 0000000..19f6ac0 --- /dev/null +++ b/xcnn/compare_v_nn.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt +import numpy as np + + +def load_p(fn): + coords = np.load(fn[0]) + values = np.load(fn[1]) + + k = 0 + for coord in coords: + if abs(coord[0]) < 1.e-8 and abs(coord[1]) < 1.e-8: + k += 1 + print k + d = np.zeros((k, 2)) + + k = 0 + for i, coord in enumerate(coords): + if abs(coord[0]) < 1.e-8 and abs(coord[1]) < 1.e-8: + d[k][0] = coord[2] + if values.ndim == 2: + d[k][1] = values[i][-1] + else: + d[k][1] = values[i] + k += 1 + + d = np.array(sorted(d.tolist(), key=lambda a:a[0])) + return d + + +def draw(ax, d, label, ls="-"): + ax.plot(d[:, 0], d[:, 1], ls=ls, label=label) + + +def main(): + vref = load_p(["d0704_single_ll_L3_0.9_9_coords.npy", "d0704_single_ll_L3_0.9_9.npy"]) + w1 = load_p(["coords_nn.npy", "xc_w_iter_01.npy"]) + w2 = load_p(["coords_nn.npy", "xc_w_iter_02.npy"]) + + fig = plt.figure() + ax = fig.add_subplot(1, 1, 1) + + draw(ax, vref, "vref", ls="-") + draw(ax, w1, "w1", ls="--") + draw(ax, w2, "w2", ls="-.") + + ax.grid(ls="--") + ax.legend() + + plt.show() + + +if __name__ == "__main__": + main() + + + diff --git a/xcnn/constrain.py b/xcnn/constrain.py new file mode 100644 index 0000000..3820e50 --- /dev/null +++ b/xcnn/constrain.py @@ -0,0 +1,113 @@ +from __future__ import print_function +import numpy + +from density import _density_on_grids2 +from density import _density_grad_on_grids_a +from density import eval_rho_on_grids + + +def improve_wxc_zf(mol, dm, coords, weights, wxc, f=numpy.zeros([3])): + print('Construct vxc based on ZF constrain.') + + # rho = eval_rho_on_grids(mol, dm, coords, deriv=1, xctype='GGA') + rho = _density_on_grids2(mol, coords, dm, deriv=1) + + N = len(coords) + AU = numpy.zeros([N, 3]) + AL = numpy.zeros([3, N]) + + for k in range(3): + AU[:, k] = rho[k+1, :] + AL[k, :] = rho[k+1, :] * weights + + B = wxc + + ALAU = numpy.einsum('ij,jk->ik', AL, AU) + assert(ALAU.shape == (3, 3)) + a = -numpy.linalg.inv(ALAU) + + LB = numpy.einsum('ij,j->i', AL, B) + aLB = numpy.einsum('ij,j->i', a, LB) + UaLB = numpy.einsum('ij,j->i', AU, aLB) + + # TODO + # check sign of f + af = numpy.einsum('ij,j->i', a, f) + Uaf = numpy.einsum('ij,j->i', AU, af) + + vxc = B + UaLB + Uaf + + return vxc[:N] + + +def improve_wxc_zfzt(mol, dm, coords, weights, wxc, f=numpy.zeros([3]), tau=numpy.zeros([3])): + print('Construct vxc based on ZF and ZT constrain.') + + rho = _density_on_grids2(mol, coords, dm, deriv=0) + rho1 = _density_grad_on_grids_a(mol, coords, dm) + rho_1 = _density_on_grids2(mol, coords, dm, deriv=1) + + # drho_cross_r = numpy.cross(rho[1:].T, coords) + # assert(drho_cross_r.shape == coords.shape) + r_cross_rho1_a = numpy.empty([mol.natm, len(coords), 3]) + for ia in range(mol.natm): + r_cross_rho1_a[ia] = numpy.cross(coords, rho1[ia].T) + # r_cross_rho1 = numpy.sum(r_cross_rho1_a, axis=0) + # assert(r_cross_rho1.shape == (len(coords), 3)) + + r_cross_rho1 = numpy.cross(coords, rho_1[1:].T) + + # numpy.save('R_cross_rho1', R_cross_rho1) + # numpy.save('rho1', rho1) + # numpy.save('xyz', mol.atom_coords()) + tmat = numpy.einsum('i,axi,i->ax', wxc, rho1, weights) + print(tmat) + # tmat = numpy.einsum('i,aix,i->ax', wxc, r_cross_rho1_a, weights) + # print(tmat) + tmat = numpy.einsum('i,ix,i->x', wxc, r_cross_rho1, weights) + print(tmat) + # exit(1) + + + N = len(coords) + AU = numpy.zeros([N, 6]) + AL = numpy.zeros([6, N]) + + for k in range(3): + # AU[:, k] = numpy.sum(rho1[:, k, :], axis=0) + # AL[k, :] = numpy.sum(rho1[:, k, :], axis=0) * weights + AU[:, k] = rho_1[k+1, :] + AL[k, :] = rho_1[k+1, :] * weights + + AU[:, 3+k] = r_cross_rho1[:, k] + AL[3+k, :] = r_cross_rho1[:, k] * weights + + B = wxc + Bc = numpy.concatenate((f, tau)) + # TODO + # check sign of f + + ALAU = numpy.einsum('ij,jk->ik', AL, AU) + assert(ALAU.shape == (6, 6)) + a = -numpy.linalg.inv(ALAU) + + LB = numpy.einsum('ij,j->i', AL, B) + aLB = numpy.einsum('ij,j->i', a, LB) + UaLB = numpy.einsum('ij,j->i', AU, aLB) + + aBc = numpy.einsum('ij,j->i', a, Bc) + UaBc = numpy.einsum('ij,j->i', AU, aBc) + + vxc = B + UaLB + UaBc + + tmat = numpy.einsum('i,axi,i->ax', vxc[:N], rho1, weights) + print(tmat) + # tmat = numpy.einsum('i,aix,i->ax', vxc[:N], r_cross_rho1_a, weights) + # print(tmat) + tmat = numpy.einsum('i,ix,i->x', vxc[:N], r_cross_rho1, weights) + print(tmat) + # exit(1) + + return vxc[:N] + + diff --git a/xcnn/density.py b/xcnn/density.py new file mode 100644 index 0000000..9eecfb9 --- /dev/null +++ b/xcnn/density.py @@ -0,0 +1,111 @@ +from __future__ import division +import numpy +from pyscf import dft + + +BLK_SIZE = 200 +einsum = numpy.einsum +XCTYPE = { + 0: 'lda', + 1: 'gga', + } + + +def _density_on_grids(mol, coords, dm): + ao_values = mol.eval_gto("GTOval_sph", coords) + rho = einsum('ij,ai,aj->a', dm, ao_values, ao_values) + return rho + # END of _density_on_grids() + + +def _density_on_grids2(mol, coords, dm, deriv=0): + ao_values = dft.numint.eval_ao(mol, coords, deriv=deriv) + rho = dft.numint.eval_rho(mol, ao_values, dm, xctype=XCTYPE[deriv]) + return rho + # END of _density_on_grids2() + + +def _density_grad_on_grids_a(mol, coords, dm): + """ + Evaluate density gradients with respect to + atomic position on grids. + """ + offset_dic = mol.offset_nr_by_atom() + rho1 = numpy.empty([mol.natm, 3, len(coords)]) + masks = numpy.empty([len(coords), mol.nao_nr()], dtype=bool) + ao_values = dft.numint.eval_ao(mol, coords, deriv=1) + + for ia in range(mol.natm): + masks[:, :] = True + shl0, shl1, p0, p1 = offset_dic[ia] + masks[:, p0:p1] = False + ao = ao_values.copy() + ao[1:, masks] = 0. + for k in range(3): + rho1[ia][k] = einsum('ij,xi,xj->x', dm, ao[0], ao[k+1]) + rho1[ia][k] += einsum('ij,xi,xj->x', dm, ao[k+1], ao[0]) + return rho1 + + +def eval_rho_on_grids(mol, dm, coords, ao=None, deriv=0, xctype="LDA"): + if ao is None: + ao = dft.numint.eval_ao(mol, coords, deriv=deriv) + rho = dft.numint.eval_rho(mol, ao, dm, xctype=xctype) + return rho + +def calc_real_space_density(mol, coords, dm): + total_size = len(coords) + n_blk = total_size // BLK_SIZE + res = total_size - n_blk * BLK_SIZE + + d = numpy.zeros(total_size, dtype=float) + for i in range(n_blk): + index = slice(i*BLK_SIZE, (i+1)*BLK_SIZE) + d[index] = _density_on_grids(mol, coords[index], dm) + if res > 0: + d[-res:] = _density_on_grids(mol, coords[-res:], dm) + + return d + # END of calc_real_space_density() + + +def calc_density_cube(wy, outfile='./rho_oep.cube', mode='diff', dm=None): + from pyscf.tools import cubegen + if dm is not None: + cubegen.density(wy.mol, outfile, dm) + else: + if mode.lower() == 'diff': + cubegen.density(wy.mol, outfile, wy.dm_out-wy.dm_in_ccsd) + elif mode.lower() == 'ccsd': + cubegen.density(wy.mol, outfile, wy.dm_in_ccsd) + elif mode.lower() == 'oep': + cubegen.density(wy.mol, outfile, wy.dm_out) + elif mode.lower() == 'rks': + cubegen.density(wy.mol, outfile, wy.mr.make_rdm1()) + else: + pass + + +def output_real_space_density(coords, d, path="./density.dat"): + with open(path, "w") as fp: + for i, coord in enumerate(coords): + fp.write("%+16.8e\t%+16.8e\t%+16.8e\t%+16.8e\n" % + (coord[0], coord[1], coord[2], d[i])) + + +def calc_real_space_density_error(rho0, rho1, weights): + drho = rho1 - rho0 + nelec0 = numpy.dot(rho0, weights) + nelec1 = numpy.dot(rho1, weights) + ndiff = numpy.dot(abs(drho), weights) + return nelec0, nelec1, ndiff + + # END of calc_real_space_density_error + +def I(rho0, rho1, weights): + drho = rho1 - rho0 + a = numpy.dot(drho*drho, weights) + b = numpy.dot(rho0*rho0, weights) + numpy.dot(rho1*rho1, weights) + return a / b + # END of I() + diff --git a/xcnn/force.py b/xcnn/force.py new file mode 100644 index 0000000..81509a9 --- /dev/null +++ b/xcnn/force.py @@ -0,0 +1,165 @@ +from __future__ import print_function +import numpy +import scipy + +from utility import print_mat + + +einsum = numpy.einsum + + +def _HF_elec(mol, dm): + """ + Hellmann-Feynman force, electronic part. + + Args: + mol (Mole): PySCF Mole class. + dm (ndarray): density matrix in AO. + + Returns: + HF force at three directions. + """ + + offsetdic = mol.offset_nr_by_atom() + HF_elec = numpy.zeros([mol.natm, 3]) + + for k, ia in enumerate(range(mol.natm)): + shl0, shl1, p0, p1 = offsetdic[ia] + mol.set_rinv_origin(mol.atom_coord(ia)) + vrinv = -mol.atom_charge(ia) * mol.intor('int1e_iprinv', comp=3) + HF_elec[k] += einsum("xij,ij->x", vrinv, dm) * 2 + + return HF_elec + + +def _HF_nuc(mol): + """ + Hellmann-Feynman force, nuclear part. + + Args: + mol (Mole): PySCF Mole class. + + Returns: + HF force at three directions. + """ + + HF_nuc = numpy.zeros((mol.natm, 3)) + atom_coords = mol.atom_coords() + Z = mol.atom_charges() + for i in range(mol.natm): + for j in range(mol.natm): + if j == i: continue + Z_pair = Z[i] * Z[j] + + dis_r = numpy.sum((atom_coords[i] - atom_coords[j]) * (atom_coords[i] - atom_coords[j])) + dis_r = numpy.sqrt(dis_r) + dis_r3 = dis_r * dis_r * dis_r + for k in range(3): + HF_nuc[i][k] += Z_pair * (atom_coords[j][k] - atom_coords[i][k]) / dis_r3 + + return HF_nuc + + +def HF_force(mol, dm, debug=False): + HF_elec = _HF_elec(mol, dm) + HF_nuc = _HF_nuc(mol) + + if debug: + print_mat(HF_elec, "HF_elec") + print_mat(HF_nuc, "HF_nuc") + print_mat(HF_elec+HF_nuc, "HF") + + HF_force = HF_elec + HF_nuc + return HF_force + + +# Pulay part +def _make_rdm1e(e, c, mo_occ): + mo0 = c[:, mo_occ>0] + mo0e = mo0 * (e[mo_occ>0] * mo_occ[mo_occ>0]) + dme_rks = numpy.dot(mo0e, mo0.T.conj()) + + return dme_rks + + +def Pulay_term(mol, v1, dm): + t = numpy.zeros([mol.natm, 3]) + offsetdic = mol.offset_nr_by_atom() + for ia in range(mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + t[ia] += einsum('xij,ij->x', v1[:, p0:p1], dm[p0:p1]) * 2 + return t + + +def Pulay_force(mol, dm, dme, H1, v01, vbg1, S1, debug=False): + veff1 = v01 + vbg1 + F1 = H1 + veff1 + + offsetdic = mol.offset_nr_by_atom() + + Pulay_tf = numpy.zeros([mol.natm, 3]) + Pulay_ts = numpy.zeros([mol.natm, 3]) + if debug: + th = numpy.zeros([mol.natm, 3]) + t0 = numpy.zeros([mol.natm, 3]) + tbg = numpy.zeros([mol.natm, 3]) + + for ia in range(mol.natm): + shl0, shl1, p0, p1 = offsetdic[ia] + Pulay_tf[ia] += einsum('xij,ij->x', F1[:, p0:p1], dm[p0:p1]) * 2 + Pulay_ts[ia] -= einsum('xij,ij->x', S1[:, p0:p1], dme[p0:p1]) * 2 + + if debug: + th[ia] += einsum('xij,ij->x', H1[:, p0:p1], dm[p0:p1]) * 2 + t0[ia] += einsum('xij,ij->x', v01[:, p0:p1], dm[p0:p1]) * 2 + tbg[ia] += einsum('xij,ij->x', vbg1[:, p0:p1], dm[p0:p1]) * 2 + + if debug: + print_mat(th, 'Pulay_th') + print_mat(t0, 'Pulay_t0') + print_mat(tbg, 'Pulay_tbg') + print_mat(Pulay_tf, 'Pulay_tf') + print_mat(Pulay_ts, 'Pulay_ts') + print_mat(Pulay_tf+Pulay_ts, 'Pulay') + + return Pulay_tf + Pulay_ts + + +def calc_force(nnks, debug=False): + from constrain import improve_wxc_zf + from xc import eval_xc_on_grids, eval_xc_mat, eval_xc_grad_mat + + wxc = eval_xc_on_grids(nnks) + if 'ZeroForce' in nnks.constrains: + force_v0_atom = Pulay_term(nnks.mol, nnks.v01, nnks.dm) + force_v0 = -numpy.sum(force_v0_atom, axis=0) + # need to use original coordinates + vxc = improve_wxc_zf(nnks.mol, nnks.dm, nnks.grids.original_coords, nnks.grids.weights, wxc, force_v0) + else: + vxc = wxc + + vxc_mat = eval_xc_mat(nnks, wxc=wxc, vxc=vxc, niter=99) + vxc1_mat = eval_xc_grad_mat(nnks, wxc=wxc, vxc=vxc, niter=99) + nnks.e, nnks.c = scipy.linalg.eigh(nnks.H+vxc_mat, nnks.S) + mocc = nnks.c[:, nnks.mo_occ>0] + dm = numpy.dot(mocc * nnks.mo_occ[nnks.mo_occ>0], mocc.T.conj()) + + ddm = dm - nnks.dm + print('Iter %3d\tmax abs diff in dm: %.8e\t sum abs diff in dm: %.8e\t# elec: %.8e' % + (99, + numpy.max(abs(ddm)), + numpy.sum(abs(ddm)), + numpy.einsum('ij,ji->', dm, nnks.S), + )) + dme = _make_rdm1e(nnks.e, nnks.c, nnks.mo_occ) + + HF = HF_force(nnks.mol, dm, debug) + Pulay = Pulay_force(nnks.mol, + dm, dme, + nnks.H1, nnks.v01, vxc1_mat, nnks.S1, + debug=debug) + + + return HF + Pulay + + diff --git a/xcnn/grid.py b/xcnn/grid.py new file mode 100644 index 0000000..54ce4c8 --- /dev/null +++ b/xcnn/grid.py @@ -0,0 +1,89 @@ +from __future__ import division +import numpy + + +class Grids(object): + def __init__(self, coords, weights, opts): + self._coords = coords + self.original_coords = coords.copy() # grids for numerical integration + self.weights = weights + self.opts = opts + + self.a = opts['CubeLength'] + self.na = opts['CubePoint'] + self.sym = opts['Symmetric'] if opts['Symmetric'] is not None else None + + self._apply_symm() + self._generate_offset() + self._extend_coords() + print('Grids::__init__() done.') + # END OF __init__() + + def _apply_symm(self): + if self.sym is None or self.sym == 'none': + self.coords = self._coords.copy() + elif self.sym == 'xz' or self.sym == 'zx': + self.coords = _mesh_xz(self._coords) + elif self.sym == 'xz+': + self.coords = _mesh_xz_half(self._coords, 1) + elif self.sym == 'xz-': + self.coords = _mesh_xz_half(self._coords, -1) + else: + warnings.warn('Unknown Symmetric option ``%s". Fallback to ``None"' % (self.sym), RuntimeWarning) + self.coords = self._coords.copy() + + # END OF _apply_symm() + + def _generate_offset(self): + na3 = self.na * self.na * self.na + offset = numpy.empty([na3, 3]) + dd = 1. / (self.na - 1) + p = 0 + for i in range(self.na): + for j in range(self.na): + for k in range(self.na): + offset[p][0] = -0.5 + dd * i + offset[p][1] = -0.5 + dd * j + offset[p][2] = -0.5 + dd * k + p += 1 + self.offset = offset * self.a + # END of _generate_offset() + + + def _extend_coords(self): + na = self.na + na3 = na * na * na + extended_coords = numpy.empty([len(self.coords)*na3, 3]) + p = 0 + for i, c in enumerate(self.coords): + extended_coords[p:p+na3] = c + self.offset + p += na3 + self.extended_coords = extended_coords + print('Grids::_extend_coords() done.') + # END of _extend_coords() + + + +def _mesh_xz(mesh): + print('Transform grids onto half xz') + coords = numpy.zeros([len(mesh), 3]) + coords[:, 0] = numpy.sqrt( + numpy.sum( + mesh[:, :2] * mesh[:, :2], + axis=1 + )) + coords[:, 2] = mesh[:, 2] + return coords + + +def _mesh_xz_half(mesh, sgn=1): + print('Transform grids onto half xz-plane') + coords = numpy.zeros([len(mesh), 3]) + coords[:, 0] = numpy.sqrt( + numpy.sum( + mesh[:, :2] * mesh[:, :2], + axis=1 + )) + coords[:, 2] = numpy.abs(mesh[:, 2]) * sgn + return coords + diff --git a/xcnn/main.py b/xcnn/main.py new file mode 100644 index 0000000..d32409d --- /dev/null +++ b/xcnn/main.py @@ -0,0 +1,66 @@ +from __future__ import print_function +import os, sys, errno +import numpy + +import pyscf +ver = pyscf.__version__.split('.') +if int(ver[1]) < 5: + print('PySCF 1.5.4 or later version is required. Abort.') + exit(1) +import configparser +from Config import get_options +from nnks import NNKS +from utility import dft, ccsd, I + + +def main(): + config = configparser.ConfigParser() + config.read(sys.argv[1]) + sections = config.sections() + + xcnn_opts = get_options(sys.argv[1], 'XCNN') + for k, v in xcnn_opts.items(): + print(k, '\t', v, '\t', v.__class__) + + print('Check point files saved to %s' % (xcnn_opts['CheckPointPath'])) + try: + os.makedirs(xcnn_opts['CheckPointPath']) + #except FileExistsError: + except OSError as e: + if e.errno == errno.EEXIST: + print('CHK folder already exists. Old files will be overwritten.') + + nnks = NNKS(xcnn_opts) + print('Prepare to perform post DFT SCF calculation.') + nnks.scf() + numpy.save('%s/dm_nn' % (xcnn_opts['CheckPointPath']), nnks.dm) + dm_rks = dft(nnks.mol, xc='B3LYPG') + dm_cc = ccsd(nnks.mol) + numpy.save('%s/dm_rks_b3lypg' % (xcnn_opts['CheckPointPath']), dm_rks) + numpy.save('%s/dm_ccsd' % (xcnn_opts['CheckPointPath']), dm_cc) + + print() + print('---- Force ----') + force = nnks.force(True) + print('Force on atoms') + for f in force: + print('%+16.12e %+16.12e %+16.12e' % (f[0], f[1], f[2])) + print() + + # mtorque = numpy.cross(force, nnks.mol.atom_coords()) + # print('mtorque') + # for t in mtorque: + # print('%+16.12e %+16.12e %+16.12e' % (t[0], t[1], t[2])) + # print() + + print('---- I ----') + print('rks, nn vs ccsd: %16.12e\t%16.12e' % + ( + I(nnks.mol, dm_cc, dm_rks, nnks.grids._coords, nnks.grids.weights), + I(nnks.mol, dm_cc, nnks.dm, nnks.grids._coords, nnks.grids.weights), + )) + + +if __name__ == '__main__': + main() + diff --git a/xcnn/model/CNN_GGA_0.py b/xcnn/model/CNN_GGA_0.py new file mode 100644 index 0000000..8d867de --- /dev/null +++ b/xcnn/model/CNN_GGA_0.py @@ -0,0 +1,33 @@ +import torch.nn as nn +import torch.nn.functional as F + + +class CNN_GGA_0(nn.Module): + def __init__(self): + super(CNN_GGA_0, self).__init__() + self.rho_type = "GGA" + self.conv1 = nn.Conv3d(4, 8, 4) # 9x9x9 -> 6x6x6 + self.fc1 = nn.Linear(216, 108) + self.fc2 = nn.Linear(108, 50) + self.fc3 = nn.Linear(50, 25) + self.fc4 = nn.Linear(25, 1) + + def forward(self, x): + # x shape: 4 x 9 x 9 x 9 + # for GGA-like NN, use electron density and its gradients + + x = F.max_pool3d(F.elu(self.conv1(x)), 2) + x = x.view(-1, self.num_flat_features(x)) + x = F.elu(self.fc1(x)) + x = F.elu(self.fc2(x)) + x = F.elu(self.fc3(x)) + x = self.fc4(x) + return x + + def num_flat_features(self, x): + size = x.size()[1:] + num_features = 1 + for s in size: + num_features *= s + return num_features + diff --git a/xcnn/model/CNN_GGA_1.py b/xcnn/model/CNN_GGA_1.py new file mode 100644 index 0000000..a417038 --- /dev/null +++ b/xcnn/model/CNN_GGA_1.py @@ -0,0 +1,36 @@ +import torch.nn as nn +import torch.nn.functional as F + + +class CNN_GGA_1(nn.Module): + def __init__(self): + super(CNN_GGA_1, self).__init__() + self.rho_type = "GGA" + self.conv1 = nn.Conv3d(4, 8, 4) # 4@9x9x9 -> 8@6x6x6, 4x4x4 kernel + self.conv2 = nn.Conv3d(8, 16, 3) # 8@6x6x6 -> 16@4x4x4, 3x3x3 kernel + self.fc1 = nn.Linear(128, 64) + self.fc2 = nn.Linear(64, 32) + self.fc3 = nn.Linear(32, 16) + self.fc4 = nn.Linear(16, 1) + + def forward(self, x): + # x shape: 4 x 9 x 9 x 9 + # for GGA-like NN, use electron density and its gradients + + x = F.elu(self.conv1(x)) + x = F.elu(self.conv2(x)) + x = F.max_pool3d(x, 2) + x = x.view(-1, self.num_flat_features(x)) + x = F.elu(self.fc1(x)) + x = F.elu(self.fc2(x)) + x = F.elu(self.fc3(x)) + x = self.fc4(x) + return x + + def num_flat_features(self, x): + size = x.size()[1:] + num_features = 1 + for s in size: + num_features *= s + return num_features + diff --git a/xcnn/model/CNN_LDA_0.py b/xcnn/model/CNN_LDA_0.py new file mode 100644 index 0000000..f4621bf --- /dev/null +++ b/xcnn/model/CNN_LDA_0.py @@ -0,0 +1,35 @@ +import torch.nn as nn +import torch.nn.functional as F + + +class CNN_LDA_0(nn.Module): + def __init__(self): + super(CNN_LDA_0, self).__init__() + self.rho_type = "LDA" + self.conv1 = nn.Conv3d(1, 6, 4) # 9x9x9 -> 6x6x6 + self.fc1 = nn.Linear(162, 81) + self.fc2 = nn.Linear(81, 40) + self.fc3 = nn.Linear(40, 1) + + def forward(self, x): + # x shape: 4 x 9 x 9 x 9 + # for LDA-like NN, use only electron density, + # i.e. [[0][:, :, :]] + + # extract first channel and add back one dimension + # 4 x 9 x 9 x 9 -> 9 x 9 x 9 -> 1 x 9 x 9 x 9 + x.data = x.data[:, 0].unsqueeze_(1) + x = F.max_pool3d(F.elu(self.conv1(x)), 2) + x = x.view(-1, self.num_flat_features(x)) + x = F.elu(self.fc1(x)) + x = F.elu(self.fc2(x)) + x = self.fc3(x) + return x + + def num_flat_features(self, x): + size = x.size()[1:] + num_features = 1 + for s in size: + num_features *= s + return num_features + diff --git a/xcnn/model/__init__.py b/xcnn/model/__init__.py new file mode 100644 index 0000000..1084094 --- /dev/null +++ b/xcnn/model/__init__.py @@ -0,0 +1,52 @@ +from __future__ import division +import importlib +import torch +import torch.nn as nn + + +MODEL_LIST = { + "cnn_lda_0": "CNN_LDA_0", + "cnn_gga_0": "CNN_GGA_0", + "cnn_gga_1": "CNN_GGA_1", + } + + +class ExtendModel(nn.Module): + def __init__(self, model, extend_size, *args): + super(ExtendModel, self).__init__() + self.model = _get_model(model, *args) + # _add_extended_fc_layer(self, extend_size) + + def load_model(self, load_path): + self.model.load_state_dict(torch.load(load_path)) + + def forward(self, x): + x = self.model.forward(x) + # x = self.fc_extend(x) + return x + + +def _add_extended_fc_layer(model, extend_size): + model.fc_extend = nn.Linear(1, extend_size) + param_iter = iter(model.fc_extend.parameters()) + # param = param_iter.next() + param = next(param_iter) + param.data[:] = 0. + param.data[extend_size // 2] = 1. + param = param_iter.next() + param.data[:] = 0. + + +def _get_model(model_name, *args): + model = None + try: + model_id = MODEL_LIST[model_name] + model_mod = importlib.import_module(".%s" % (model_id), package=__package__) + model = getattr(model_mod, model_id)(*args) + except KeyError: + print("No model named %s" % (model_name.lower())) + exit(1) + else: + pass + return model + diff --git a/xcnn/nnks.py b/xcnn/nnks.py new file mode 100644 index 0000000..e07f689 --- /dev/null +++ b/xcnn/nnks.py @@ -0,0 +1,149 @@ +from __future__ import print_function +import os.path +import numpy + +import pyscf.gto, pyscf.scf + +from model import * +from grid import Grids +from scf import * +from IO import parse_str +from force import calc_force + + +class NNKS(object): + def __init__(self, opts): + self.opts = opts + self.chk_path = opts['CheckPointPath'] + + self._generate_mol(opts['Structure'], opts['OrbitalBasis']) + + self._get_fixed_matrix(opts['ReferencePotential'], opts['CheckPointPath']) + + self._load_nn_model(opts['Model'], opts['ModelPath']) + + self._get_model_info() + + # == DEBUG == + # mr = pyscf.scf.RKS(self.mol) + # mr.xc = 'b3lypg' + # # mr.kernel() + # mr.grids.build() + # print(mr.grids.coords.shape) + # self.grids = Grids( + # mr.grids.coords, + # mr.grids.weights, + # self.opts) + # == DEBUG == + self.grids = Grids( + self.mr.grids.coords, + self.mr.grids.weights, + self.opts) + + self.scf_crit = opts['ConvergenceCriterion'] + self.scf_max_iter = opts['MaxIteration'] + + self.constrains = list() + if opts['ZeroForceConstrain']: self.constrains.append('ZeroForce') + if opts['ZeroTorqueConstrain']: self.constrains.append('ZeroTorque') + + self.dm_cc = None + self.dm_rks = None + self.dm_rhf = None + self.dm_hfx = None + self.dm_nn = None + + print('NNKS::__init__() done.') + # END of __init__() + + + def _generate_mol(self, fn, basis, grid_level=3): + atom_list, atom_str, charge, spin = parse_str(fn) + + self.mol = pyscf.gto.M( + atom=atom_str, + basis=basis, + charge=charge, + spin=spin) + + n_elec = self.mol.nelectron + n_ao = self.mol.nao_nr() + self.mo_occ = numpy.zeros(n_ao) + self.mo_occ[:n_elec//2] = 2 + self.n_occ = n_elec//2 + + self.mf = pyscf.scf.RHF(self.mol) + self.mr = pyscf.scf.RKS(self.mol) + self.mr.grids.level = grid_level + # self.mr.grids.build() + + print('Structure info:') + for a in self.mol._atom: + print('%2s\t%+12.8e\t%+12.8e\t%+12.8e Bohr' % + (a[0], a[1][0], a[1][1], a[1][2])) + print('charge = %d\nspin = %d' % (self.mol.charge, self.mol.spin)) + print('NNKS::_generate_mol() done.') + # END of _generate_mol() + + def _get_fixed_matrix(self, ref_pot, chk_path): + mol = self.mol + self.S = mol.intor('int1e_ovlp_sph') + self.T = mol.intor('cint1e_kin_sph') + self.vn = mol.intor('cint1e_nuc_sph') + + if ref_pot[0].lower() == 'hfx': + self.reference_potential = 'hfx' + print("Use HFX reference potential") + self.mr.xc = 'hf,' + if False and os.path.isfile('%s/dm_hfx.npy' % (chk_path)): + print("Load dm from %s/dm_hfx.npy" % (chk_path)) + dm_hfx = numpy.load('%s/dm_hfx.npy' % (chk_path)) + self.mr.kernel(dm0=dm_hfx) + else: + self.mr.kernel() + dm_hfx = self.mr.make_rdm1() + print("Save dm to %s/dm_hfx.npy" % (chk_path)) + numpy.save('%s/dm_hfx' % (chk_path), dm_hfx) + numpy.save('%s/dm_rks_%s' % (chk_path, self.mr.xc), dm_hfx) + from pyscf import dft + self.v0 = dft.rks.get_veff(self.mr, self.mol, dm_hfx) + from pyscf.grad import rks as rks_grad + g = rks_grad.Gradients(self.mr) + vj1, vk1 = g.get_jk(dm=self.mr.make_rdm1()) + self.v01 = vj1 - vk1 * 0.5 + self.H1 = g.get_hcore() + self.S1 = g.get_ovlp() + + # self._int2e_irxp1 = mol.intor('int2e_irxp1') + # self.vj_irxp1 = -numpy.einsum('xijkl,kl->xij', self._int2e_irxp1, self.mr.make_rdm1()) + # self.vk_irxp1 = -numpy.einsum('xijkl,jk->xil', self._int2e_irxp1, self.mr.make_rdm1()) + # self.v0_irxp1 = self.vj_irxp1 - self.vk_irxp1 * 0.5 + else: + raise NotImplementedError + + self.H = self.T + self.vn + self.v0 + print('NNKS::_get_fixed_matrix() done.') + # END of _get_fixed_matrix() + + def _load_nn_model(self, model, model_path): + self.nn_model = ExtendModel(model, 1) + if self.opts['EnableCuda']: self.nn_model.cuda() + self.nn_model.load_model(model_path) + print('NNKS::_load_nn_model() done.') + # END of _load_nn_model() + + def _get_model_info(self): + self.cuda = self.opts['EnableCuda'] + self.a = self.opts['CubeLength'] + self.na = self.opts['CubePoint'] + print('NNKS::_get_model_info() done.') + # END of _get_model_info() + + def scf(self): + initialize(self) + scf(self) + + def force(self, verbose=False): + return calc_force(self, debug=verbose) + + diff --git a/xcnn/rms.py b/xcnn/rms.py new file mode 100644 index 0000000..0a8a0b1 --- /dev/null +++ b/xcnn/rms.py @@ -0,0 +1,42 @@ +from __future__ import print_function +import numpy +import sys +from pyscf import gto, scf + +from xcnn.io.config import get_options +from xcnn.io.read_structure import read_structure +from xcnn.post_dft.nnks import NNKS +from xcnn.post_dft.model import * +from xcnn.utility.ccsd import ccsd +from xcnn.tools.compare_rho import compare_rho + +from compare_density import compare_density + + +def main(): + mol = gto.M(atom=sys.argv[1], basis="augccpvqz", charge=int(sys.argv[2]), spin=0) + mr = scf.RKS(mol) + mr.xc = "B3LYPG" + mr.run() + dm_rks = mr.make_rdm1() + + dm_cc, _ = ccsd(mol) + dms = [numpy.load(fn) for fn in sys.argv[3:]] + dms.insert(0, dm_cc) + dms.insert(1, dm_rks) + labels = sys.argv[3:] + labels.insert(0, "cc") + labels.insert(1, "b3lypg") + + dms = numpy.array(dms) + print("======== rms**2 ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "rms2", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + +if __name__ == "__main__": + main() + diff --git a/xcnn/scf.py b/xcnn/scf.py new file mode 100644 index 0000000..8c9c96e --- /dev/null +++ b/xcnn/scf.py @@ -0,0 +1,80 @@ +from __future__ import print_function +import numpy +import scipy + +from xc import eval_xc_mat +from utility import dft, ccsd, rhf + + +def initialize(nnks): + if nnks.opts['InitDensityMatrix'].lower() == 'rks': + print('Use RKS with xc ``%s" density as init' % (nnks.opts['xcFunctional'])) + if nnks.dm_rks is None: + nnks.dm_rks = dft(nnks.mol, xc=nnks.opts['xcFunctional']) + nnks.dm0 = nnks.dm_rks.copy() + elif nnks.opts['InitDensityMatrix'].lower() == 'ccsd': + print('Use CC density as init') + if nnks.dm_cc is None: + nnks.dm_cc = ccsd(nnks.mol) + nnks.dm0 = nnks.dm_cc + elif nnks.opts['InitDensityMatrix'].lower() == 'rhf': + print('Use RHF density as init') + if nnks.dm_rhf is None: + nnks.dm_rhf = rhf(nnks.mol) + nnks.dm0 = nnks.dm_rhf + elif nnks.opts['InitDensityMatrix'].find('load') != -1: + print('Load %s as init' % (nnks.opts['InitDensityMatrix'].split()[1])) + nnks.dm0 = numpy.load(nnks.opts['InitDensityMatrix'].split()[1]) + print('Initialize done.') + + +def scf(nnks): + """ + Perform SCF calculation using vbg predicted from 3D-CNN. + + Args: + nnks (NNKS): an NNKS instance. + """ + + print() + print('================') + print('SCF calculation') + print('================') + + nnks.dm = nnks.dm0 + conveged = False + for i_iter in range(nnks.scf_max_iter): + vxc = eval_xc_mat(nnks, niter=i_iter) + + nnks.e, nnks.c, dm_new = solve_KS(nnks.H+vxc, nnks.S, nnks.mo_occ) + numpy.save('%s/dm_iter_%02d' % (nnks.chk_path, i_iter+1), dm_new) + + ddm = dm_new - nnks.dm + print('Iter %3d\tmax abs diff in dm: %.8e\t sum abs diff in dm: %.8e\t# elec: %.8e' % + (i_iter, + numpy.max(abs(ddm)), + numpy.sum(abs(ddm)), + numpy.einsum('ij,ji->', dm_new, nnks.S), + )) + if numpy.linalg.norm(ddm) < nnks.scf_crit: + print('SCF converged.') + conveged = True + + nnks.dm = dm_new + if conveged: break + + if not conveged: + print('SCF convergence fails.') + # END of scf() + + +def solve_KS(f, s, mo_occ): + e, c = scipy.linalg.eigh(f, s) + + mocc = c[:, mo_occ>0] + dm = numpy.dot(mocc * mo_occ[mo_occ>0], mocc.T.conj()) + + return e, c, dm + + + diff --git a/xcnn/utility.py b/xcnn/utility.py new file mode 100644 index 0000000..ac8acd7 --- /dev/null +++ b/xcnn/utility.py @@ -0,0 +1,56 @@ +import numpy +import pyscf + +from density import _density_on_grids + +einsum = numpy.einsum + + +def dft(mol, mr=None, xc=None, level=3): + if mr is None: + mr = pyscf.scf.RKS(mol) + if xc is not None: + mr.xc = xc + mr.grids.level = level + mr.run() + return mr.make_rdm1() + + +def rhf(mol, mf=None): + if mf is None: + mf = pyscf.scf.RHF(mol) + mf.kernel() + return mf.make_rdm1() + + +def ccsd(mol, mcc=None, mf=None): + if mf is None: + mf = pyscf.scf.RHF(mol) + mf.kernel() + c = mf.mo_coeff + if mcc is None: + mcc = pyscf.cc.CCSD(mf) + ecc, t1, t2 = mcc.kernel() + rdm1 = mcc.make_rdm1() + rdm1_ao = einsum('pi,ij,qj->pq', c, rdm1, c.conj()) + return rdm1_ao + + +def print_mat(mat, name=None): + if name is None: + print(mat.shape) + print(mat) + else: + print(name, mat.shape) + print(mat) + + +def I(mol, dm1, dm2, coords, weights): + rho1 = _density_on_grids(mol, coords, dm1) + rho2 = _density_on_grids(mol, coords, dm2) + drho = rho1 - rho2 + + a = numpy.sum(drho * drho * weights) + b = numpy.sum(rho1 * rho1 * weights) + numpy.sum(rho2 * rho2 * weights) + return a / b + diff --git a/xcnn/xc.py b/xcnn/xc.py new file mode 100644 index 0000000..ae54170 --- /dev/null +++ b/xcnn/xc.py @@ -0,0 +1,256 @@ +from __future__ import division +import numpy +import pyscf.dft +import torch +from torch.autograd import Variable +from tqdm import tqdm + +from density import _density_on_grids2 +from density import eval_rho_on_grids +from force import Pulay_term +from constrain import improve_wxc_zf, improve_wxc_zfzt + + +einsum = numpy.einsum +BLK_SIZE = 200 + + +def _eval_xc_from_nn(model, rho, cuda): + """ + Feed local density into 3D-CNN model to get vbg. + + Args: + model (torch.nn.Model): 3D-CNN model. + rho (ndarray): density on grids. + cuda (boolean): whether to enable cuda acceleration. + Returns: + predicted vbg corresponding to rho. + """ + + inputs = torch.from_numpy(rho) + if cuda: inputs = inputs.cuda() + + inputs = Variable(inputs) + outputs = model(inputs) + + if cuda: outputs = outputs.cpu() + vbg = outputs.data.numpy().reshape(-1) + + return vbg + # END of _eval_xc_from_nn() + + +def _eval_rho_on_grids(mol, coords, dm, na): + """ + Evaluate density on grids and re-arrange to NN input. + + Args: + mol (pyscf.Mole): PySCF Mole instance. + coords (ndarray): coordinates. + dm (ndarray): density matrix. + na (int): number of cube points along each direction. + Returns: + electron densities of size (... x 4 x na x na x na) + """ + + n_samples = len(coords) // (na * na * na) + # rho = _density_on_grids2(mol, coords, dm, deriv=1) + rho = eval_rho_on_grids(mol, dm, coords, deriv=1, xctype='GGA') + rho = rho.reshape([4, n_samples, na, na, na]).astype(numpy.float32) + rho = rho.transpose([1, 0, 2, 3, 4]) + return rho + # END of _eval_rho_on_grids() + + +def eval_xc_on_grids(nnks): + """ + Evaluate vbg using 3D-CNN and current electron densities. + Args: + nnks (NNKS): a NNKS instance containing necessary informations. + + Returns: + vbg on grids. + """ + mol = nnks.mol + dm = nnks.dm + coords = nnks.grids.coords + extended_coords = nnks.grids.extended_coords + na = nnks.na + na3 = na * na * na + + total_size = len(coords) + assert(total_size * na3 == len(extended_coords)) + + n_blk = total_size // BLK_SIZE + res = total_size - BLK_SIZE * n_blk + + print('Evaluate xc potential on grids. Block size: %d Total: %d Number of blocks: %d Residual: %d' % + (BLK_SIZE, total_size, n_blk, res)) + + wxc = numpy.empty(total_size) + with tqdm(total=total_size) as pbar: + for i in range(n_blk): + idx = slice(BLK_SIZE * i, BLK_SIZE * (i + 1)) + ext_idx = slice(BLK_SIZE * i * na3, BLK_SIZE * (i + 1) * na3) + rho = _eval_rho_on_grids(mol, extended_coords[ext_idx], dm, na) + wxc[idx] = _eval_xc_from_nn(nnks.nn_model, rho, nnks.cuda) + pbar.update(BLK_SIZE) + + if res > 0: + rho = _eval_rho_on_grids(mol, extended_coords[-res*na3:], dm, na) + wxc[-res:] = _eval_xc_from_nn(nnks.nn_model, rho, nnks.cuda) + pbar.update(res) + + return wxc + # END of eval_xc_on_grids() + + +def eval_xc_mat(nnks, wxc=None, vxc=None, niter=0): + """ + Evaluate vbg using 3D-CNN and current electron densities, + apply required constrain, + and generate matrix representation. + Args: + nnks (NNKS): a NNKS instance containing necessary informations. + niter (int): number of iteration + + Returns: + matrix vbg + """ + + weights = nnks.grids.weights + + if wxc is None: + wxc = eval_xc_on_grids(nnks) + + if vxc is None: + if 'ZeroForce' in nnks.constrains and 'ZeroTorque' in nnks.constrains: + force_v0_atom = Pulay_term(nnks.mol, nnks.v01, nnks.dm) + print(force_v0_atom) + force_v0 = -numpy.sum(force_v0_atom, axis=0) + torque_v0_atom = numpy.cross(nnks.mol.atom_coords(), force_v0_atom) + # print(torque_v0_atom) + # torque_v0 = numpy.sum(torque_v0_atom, axis=0) + torque_v0 = Pulay_term(nnks.mol, nnks.v0_irxp1, nnks.dm) + torque_v0 = numpy.sum(torque_v0, axis=0) + print(torque_v0) + vH_irxp1 = -einsum('xijkl,lk->xij', nnks._int2e_irxp1, nnks.dm) + torque_vH = Pulay_term(nnks.mol, vH_irxp1, nnks.dm) + torque_vH = numpy.sum(torque_vH, axis=0) + print(torque_vH) + + torque_tmp = einsum( + 'xij,ij->x', + nnks.v0_irxp1-vH_irxp1, + nnks.dm) + print(torque_tmp) + + # if niter == 1: exit(1) + + # vxc = improve_wxc_zfzt(nnks.mol, nnks.dm, nnks.grids.original_coords, weights, wxc, force_v0, torque_v0-torque_vH) + vxc = improve_wxc_zfzt(nnks.mol, nnks.dm, nnks.grids.original_coords, weights, wxc, force_v0, torque_tmp) + + elif 'ZeroForce' in nnks.constrains: + force_v0_atom = Pulay_term(nnks.mol, nnks.v01, nnks.dm) + force_v0 = -numpy.sum(force_v0_atom, axis=0) + # need to use original coordinates + vxc = improve_wxc_zf(nnks.mol, nnks.dm, nnks.grids.original_coords, weights, wxc, force_v0) + else: + vxc = wxc + + + total_size = len(nnks.grids.original_coords) + + n_blk = total_size // BLK_SIZE + res = total_size - BLK_SIZE * n_blk + + xc_mat = numpy.zeros(nnks.dm.shape, dtype=nnks.dm.dtype) + ao_loc = nnks.mol.ao_loc_nr() + shls_slice = (0, nnks.mol.nbas) + + for i in range(n_blk): + idx = slice(BLK_SIZE * i, BLK_SIZE * (i + 1)) + + ao = pyscf.dft.numint.eval_ao(nnks.mol, nnks.grids.original_coords[idx], deriv=0) + n_grids, n_ao = ao.shape + wv = weights[idx] * vxc[idx] * 0.5 + aow = einsum('pi,p->pi', ao, wv) + xc_mat += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao, aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + + if res > 0: + ao = pyscf.dft.numint.eval_ao(nnks.mol, nnks.grids.original_coords[-res:], deriv=0) + n_grids, n_ao = ao.shape + wv = weights[-res:] * vxc[-res:] * 0.5 + aow = einsum('pi,p->pi', ao, wv) + xc_mat += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao, aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + + numpy.save("%s/xc_w_iter_%02d" % (nnks.chk_path, niter + 1), wxc) + numpy.save("%s/xc_v_iter_%02d" % (nnks.chk_path, niter + 1), vxc) + numpy.save("%s/coords_nn" % (nnks.chk_path), nnks.grids.original_coords) + + return xc_mat + xc_mat.T + + +def eval_xc_grad_mat(nnks, wxc=None, vxc=None, niter=0): + """ + Evaluate vbg using 3D-CNN and current electron densities, + apply required constrain, + and generate matrix representation of + its first derivative with respect to nuclear coordinates. + Args: + nnks (NNKS): a NNKS instance containing necessary informations. + niter (int): number of iteration + + Returns: + matrix vbg_1 + """ + + weights = nnks.grids.weights + + if wxc is None: + wxc = eval_xc_on_grids(nnks) + + if vxc is None: + if 'ZeroForce' in nnks.constrains: + force_v0_atom = Pulay_term(nnks.mol, nnks.v01, nnks.dm) + force_v0 = -numpy.sum(force_v0_atom, axis=0) + # need to use original coordinates + vxc = improve_wxc_zf(nnks.mol, nnks.dm, nnks.grids.original_coords, weights, wxc, force_v0) + else: + vxc = wxc + + total_size = len(nnks.grids.original_coords) + + n_blk = total_size // BLK_SIZE + res = total_size - BLK_SIZE * n_blk + + xc_mat = numpy.zeros((3,)+nnks.dm.shape, dtype=nnks.dm.dtype) + ao_loc = nnks.mol.ao_loc_nr() + shls_slice = (0, nnks.mol.nbas) + + for i in range(n_blk): + idx = slice(BLK_SIZE * i, BLK_SIZE * (i + 1)) + ao = pyscf.dft.numint.eval_ao(nnks.mol, nnks.grids.original_coords[idx], deriv=1) + n_grids, n_ao = ao[0].shape + + wv = weights[idx] * vxc[idx] # NOTE no *.5 + aow = einsum('pi,p->pi', ao[0], wv) + + xc_mat[0] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[1], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + xc_mat[1] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[2], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + xc_mat[2] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[3], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + + if res > 0: + ao = pyscf.dft.numint.eval_ao(nnks.mol, nnks.grids.original_coords[-res:], deriv=1) + n_grids, n_ao = ao[0].shape + + wv = weights[-res:] * vxc[-res:] # NOTE no *.5 + aow = einsum('pi,p->pi', ao[0], wv) + + xc_mat[0] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[1], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + xc_mat[1] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[2], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + xc_mat[2] += pyscf.dft.numint._dot_ao_ao(nnks.mol, ao[3], aow, numpy.ones((n_grids, nnks.mol.nbas), dtype=numpy.int8), shls_slice, ao_loc) + + return -xc_mat + + diff --git a/xcnn/xcnn_compare.py b/xcnn/xcnn_compare.py new file mode 100644 index 0000000..a2792d4 --- /dev/null +++ b/xcnn/xcnn_compare.py @@ -0,0 +1,93 @@ +from __future__ import print_function +import numpy +import sys +from pyscf import gto, scf + +from xcnn.io.config import get_options +from xcnn.io.read_structure import read_structure +from xcnn.post_dft.nnks import NNKS +from xcnn.post_dft.model import * +from xcnn.utility.ccsd import ccsd +from xcnn.tools.compare_rho import compare_rho + +from compare_density import compare_density + + +def main(): + mol = gto.M(atom=sys.argv[1], basis="augccpvqz", charge=int(sys.argv[2]), spin=0) + mr = scf.RKS(mol) + mr.xc = "B3LYPG" + mr.run() + dm_rks = mr.make_rdm1() + + dm_cc, _ = ccsd(mol) + dms = [numpy.load(fn) for fn in sys.argv[3:-1]] + dms.insert(0, dm_cc) + dms.insert(1, dm_rks) + labels = sys.argv[3:-1] + labels.insert(0, "cc") + labels.insert(1, "b3lypg") + + if sys.argv[-1].find("I") != -1: + print("======== I ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "I", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("wI1") != -1: + print("======== wI1 ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "wI1", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("wI2") != -1: + print("======== wI2 ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "wI2", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("rms") != -1: + print("======== rms**2 ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "rms2", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("mad") != -1: + print("======== mad ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "mad", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("wmad") != -1: + print("======== wmad ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "wmad", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("wmad2") != -1: + print("======== wmad2 ========") + for i, dm in enumerate(dms[1:]): + numerator, denominator = compare_density( + mol, dm, dms[0], mr.grids, "wmad2", + full_output=True) + print("%20s\t%16.8e / %16.8e = %16.8e" % (labels[i+1], numerator, denominator, numerator / denominator)) + + if sys.argv[-1].find("draw") != -1: + print("======== graphic ========") + compare_rho(mol, numpy.array(dms), mr.grids.coords, sys.argv[-1], label=labels) + +if __name__ == "__main__": + main() + diff --git a/xcnn/zf.py b/xcnn/zf.py new file mode 100644 index 0000000..61f8d68 --- /dev/null +++ b/xcnn/zf.py @@ -0,0 +1,66 @@ +from __future__ import print_function +import time +import numpy + +from xcnn.utility import numint + + +## def head_gordon_zf(mol, dm, coords, weights, wxc, f=0.): +## print("Construct vxc based on ZF constrain...\t", end="") +## tt = time.time() +## +## # electron density on grid points +## rho = numint.eval_rho_on_grids(mol, dm, coords=coords, deriv=1, xctype="GGA") +## +## N = len(coords) +## +## AU = rho[3, :] +## AL = rho[3, :] * weights +## +## B = wxc +## +## a = -1. / numpy.dot(AL, AU) +## LB = numpy.dot(AL, B) +## +## vxc = B + a * LB * AU + f * a * AU +## +## print("time elapses: %.8lf s" % (time.time() - tt)) +## +## return vxc[:N] + +def head_gordon_zf(mol, dm, coords, weights, wxc, f=numpy.zeros([3])): + print("Construct vxc based on ZF constrain...\t", end="") + tt = time.time() + + # electron density on grid points + rho = numint.eval_rho_on_grids(mol, dm, coords=coords, deriv=1, xctype="GGA") + + N = len(coords) + AU = numpy.zeros([N, 3]) + AL = numpy.zeros([3, N]) + + for k in range(3): + AU[:, k] = rho[k+1, :] + AL[k, :] = rho[k+1, :] * weights + + B = wxc + + ALAU = numpy.einsum('ij,jk->ik', AL, AU) + assert(ALAU.shape == (3, 3)) + a = -numpy.linalg.inv(ALAU) + + LB = numpy.einsum('ij,j->i', AL, B) + aLB = numpy.einsum('ij,j->i', a, LB) + UaLB = numpy.einsum('ij,j->i', AU, aLB) + + # TODO + # check sign of f + af = numpy.einsum('ij,j->i', a, f) + Uaf = numpy.einsum('ij,j->i', AU, af) + + vxc = B + UaLB + Uaf + + print("time elapses: %.8lf s" % (time.time() - tt)) + + return vxc[:N] +