10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-15 18:43:51 +01:00
QuantumPackage/plugins/local/mo_localization
2023-11-07 10:27:34 +01:00
..
org Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
84.mo_localization.bats Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
break_spatial_sym.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
debug_gradient_loc.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
debug_hessian_loc.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
EZFIO.cfg Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
kick_the_mos.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
localization_sub.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
localization.irp.f Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
NEED Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00
README.md Moved many modules in plugins/local for quicker installation 2023-11-07 10:27:34 +01:00

Orbital localisation

To localize the MOs:

qp run localization  

By default, the different otbital classes are automatically set by splitting
the orbitales in the following classes:
- Core -> Core
- Active, doubly occupied -> Inactive
- Active, singly occupied -> Active
- Active, empty -> Virtual
- Deleted -> Deleted
The orbitals will be localized among each class, excpect the deleted ones. If you want to choose another splitting, you can set

qp set mo_localization auto_mo_class false

and define the classes with

qp set_mo_class -c [] -a [] -v [] -i [] -d [] 

for more information

qp set_mo_class -q

We dont care about the name of the
mo classes. The algorithm just localizes all the MOs of
a given class between them, for all the classes, except the deleted MOs.
If you are using the last option dont forget to reset the initial mo classes
after the localization.

Before the localization, a kick is done for each mo class
(except the deleted ones) to break the MOs. This is done by
doing a given rotation between the MOs. This feature can be removed by setting:

qp set localization kick_in_mos false

and the default angle for the rotation can be changed with:

qp set localization angle_pre_rot 1e-3 # or something else

After the localization, the MOs of each class (except the deleted ones)
can be sorted between them using the diagonal elements of
the fock matrix with:

qp set localization sort_mos_by_e true

You can check the Hartree-Fock energy before/during/after the localization
by putting (only for debugging):

qp set localization debug_hf true 

Foster-Boys & Pipek-Mezey

Foster-Boys:

qp set localization localization_method boys 

Pipek-Mezey:

qp set localization localization_method pipek 

Break the spatial symmetry of the MOs

This program work exactly as the localization.
To break the spatial symmetry of the MOs:

qp run break_spatial_sym

The default angle for the rotations is too big for this kind of application, a value between 1e-3 and 1e-6 should break the spatial symmetry with just a small change in the energy:

qp set localization angle_pre_rot 1e-3

With or without hessian + trust region

With hessian + trust region

qp set localization localisation_use_hessian true

It uses the trust region algorithm with the diagonal of the hessian of the localization criterion with respect to the MO rotations.

Without the hessian and the trust region

qp set localization localisation_use_hessian false

By doing so it does not require to store the hessian but the convergence is not easy, in particular for virtual MOs. It seems that it not possible to converge with Pipek-Mezey localization with this approach.

Parameters

Some other parameters are available for the localization (qp edit for more details).

Tests

qp test

Org files

The org files are stored in the directory org in order to avoid overwriting on user changes. The org files can be modified, to export the change to the source code, run

./TANGLE_org_mode.sh
mv *.irp.f ../.