10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-06-21 20:52:28 +02:00

Merge branch 'dev-lct' of https://github.com/QuantumPackage/qp2 into dev-lct

This commit is contained in:
Emmanuel Giner LCT 2019-06-17 11:37:28 +02:00
commit 5d4a51d287
69 changed files with 1758 additions and 189 deletions

View File

@ -46,7 +46,7 @@ Requirements
- `GMP <https://gmplib.org/>`_ : Gnu Multiple Precision Arithmetic Library
- |OCaml| compiler with |OPAM| package manager
- `Bubblewrap <https://github.com/projectatomic/bubblewrap>`_ : Sandboxing tool required by Opam
- `libcap https://git.kernel.org/pub/scm/linux/kernel/git/morgan/libcap.git`_ : POSIX capabilities required by Bubblewrap
- `libcap <https://git.kernel.org/pub/scm/linux/kernel/git/morgan/libcap.git>`_ : POSIX capabilities required by Bubblewrap
- |Ninja| : a parallel build system

View File

@ -1,13 +1,28 @@
# Quantum Package 2.0
<img src="https://raw.githubusercontent.com/QuantumPackage/qp2/master/data/qp2.png" width="250">
[*Quantum package 2.0: an open-source determinant-driven suite of programs*](https://pubs.acs.org/doi/10.1021/acs.jctc.9b00176)\
Y. Garniron, K. Gasperich, T. Applencourt, A. Benali, A. Ferté, J. Paquier, B. Pradines, R. Assaraf, P. Reinhardt, J. Toulouse, P. Barbaresco, N. Renon, G. David, J. P. Malrieu, M. Véril, M. Caffarel, P. F. Loos, E. Giner and A. Scemama\
J. Chem. Theory Comput. (2019)\
J. Chem. Theory Comput., 15:6, 3591--3609, (2019)\
https://arxiv.org/abs/1902.08154
<img src="https://raw.githubusercontent.com/QuantumPackage/qp2/master/data/qp2.png" width="250">
```
@article{doi:10.1021/acs.jctc.9b00176,
author = {Garniron, Yann and Applencourt, Thomas and Gasperich, Kevin and Benali, Anouar and Ferté, Anthony and Paquier, Julien and Pradines, Barthélémy and Assaraf, Roland and Reinhardt, Peter and Toulouse, Julien and Barbaresco, Pierrette and Renon, Nicolas and David, Grégoire and Malrieu, Jean-Paul and Véril, Mickaël and Caffarel, Michel and Loos, Pierre-François and Giner, Emmanuel and Scemama, Anthony},
title = {Quantum Package 2.0: An Open-Source Determinant-Driven Suite of Programs},
journal = {Journal of Chemical Theory and Computation},
volume = {15},
number = {6},
pages = {3591-3609},
year = {2019},
doi = {10.1021/acs.jctc.9b00176},
note ={PMID: 31082265},
URL = { https://doi.org/10.1021/acs.jctc.9b00176 },
eprint = { https://doi.org/10.1021/acs.jctc.9b00176 }
}
```
# Getting started

View File

@ -1,71 +0,0 @@
#!/usr/bin/env python2
"""
Creates an ssh tunnel for using slaves on another network.
Launch a server on the front-end node of the cluster on which the master
process runs. Then start a client ont the front-end node of the distant
cluster.
Usage:
qp_tunnel server EZFIO_DIR
qp_tunnel client <address> EZFIO_DIR
Options:
-h --help
"""
import os
import sys
import zmq
try:
import qp_path
except ImportError:
print "source .quantum_package.rc"
raise
from docopt import docopt
from ezfio import ezfio
def get_address(filename):
with open(os.path.join(filename,'work','qp_run_address'),'r') as f:
a = f.readlines()[0].strip()
return a
def set_address(filename,address):
with open(os.path.join(filename,'work','qp_run_address'),'r') as f:
backup = f.readlines()
with open(os.path.join(filename,'work','qp_run_address'),'w') as f:
f.write('\n'.join([address]+backup))
def main_server(arguments,filename):
destination = get_address(filename)
print destination
def main_client(arguments,filename):
destination = arguments["<address>"]
print destination
def main(arguments):
"""Main function"""
print arguments
filename = arguments["EZFIO_DIR"]
if arguments["server"]:
return main_server(arguments, filename)
if arguments["client"]:
return main_client(arguments, filename)
if __name__ == '__main__':
ARGUMENTS = docopt(__doc__)
main(ARGUMENTS)

View File

@ -176,6 +176,7 @@ Providers
* :c:data:`ao_num`
* :c:data:`ao_power`
* :c:data:`ao_prim_num`
* :c:data:`mu_erf`
* :c:data:`n_pt_max_integrals`
* :c:data:`nucl_coord`
@ -214,6 +215,7 @@ Providers
* :c:data:`ao_prim_num`
* :c:data:`ezfio_filename`
* :c:data:`io_ao_two_e_integrals_erf`
* :c:data:`mu_erf`
* :c:data:`n_pt_max_integrals`
* :c:data:`nproc`
* :c:data:`nucl_coord`
@ -290,6 +292,7 @@ Subroutines / functions
* :c:data:`ao_power`
* :c:data:`ao_expo_ordered_transp`
* :c:data:`ao_prim_num`
* :c:data:`mu_erf`
* :c:data:`ao_nucl`
* :c:data:`nucl_coord`

View File

@ -1016,6 +1016,70 @@ Subroutines / functions
* :c:func:`two_e_integrals_index`
.. c:function:: get_ao_two_e_integrals_non_zero_jl:
File : :file:`ao_two_e_ints/map_integrals.irp.f`
.. code:: fortran
subroutine get_ao_two_e_integrals_non_zero_jl(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int)
Gets multiple AO bi-electronic integral from the AO map .
All non-zero i are retrieved for j,k,l fixed.
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_integrals_map`
* :c:data:`ao_overlap_abs`
* :c:data:`ao_two_e_integral_schwartz`
* :c:data:`ao_two_e_integrals_in_map`
Calls:
.. hlist::
:columns: 3
* :c:func:`map_get`
* :c:func:`two_e_integrals_index`
.. c:function:: get_ao_two_e_integrals_non_zero_jl_from_list:
File : :file:`ao_two_e_ints/map_integrals.irp.f`
.. code:: fortran
subroutine get_ao_two_e_integrals_non_zero_jl_from_list(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int)
Gets multiple AO two-electron integrals from the AO map .
All non-zero i are retrieved for j,k,l fixed.
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_integrals_map`
* :c:data:`ao_overlap_abs`
* :c:data:`ao_two_e_integral_schwartz`
* :c:data:`ao_two_e_integrals_in_map`
Calls:
.. hlist::
:columns: 3
* :c:func:`map_get`
* :c:func:`two_e_integrals_index`
.. c:function:: give_polynom_mult_center_x:
@ -1243,6 +1307,8 @@ Subroutines / functions
* :c:func:`get_ao_two_e_integral_erf`
* :c:func:`get_ao_two_e_integrals_erf_non_zero`
* :c:func:`get_ao_two_e_integrals_non_zero`
* :c:func:`get_ao_two_e_integrals_non_zero_jl`
* :c:func:`get_ao_two_e_integrals_non_zero_jl_from_list`
* :c:func:`get_mo_two_e_integral_erf`
* :c:func:`get_mo_two_e_integrals_coulomb_ii`
* :c:func:`get_mo_two_e_integrals_erf`

View File

@ -93,6 +93,12 @@ EZFIO parameters
Total number of grid points
.. option:: thresh_grid
threshold on the weight of a given grid point
Default: 1.e-20
Providers
---------
@ -210,6 +216,7 @@ Providers
* :c:data:`n_points_final_grid`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
@ -244,6 +251,40 @@ Providers
* :c:data:`one_e_dm_no_core_and_grad_alpha_in_r`
.. c:var:: final_grid_points_per_atom
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
double precision, allocatable :: final_grid_points_per_atom (3,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: final_weight_at_r_vector_per_atom (n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom (3,n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`n_points_radial_grid`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
.. c:var:: final_weight_at_r
@ -263,10 +304,10 @@ Providers
* :c:data:`alpha_knowles`
* :c:data:`angular_quadrature_points`
* :c:data:`grid_atomic_number`
* :c:data:`grid_points_radial`
* :c:data:`m_knowles`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_charge`
* :c:data:`nucl_num`
* :c:data:`weight_at_r`
@ -276,6 +317,9 @@ Providers
:columns: 3
* :c:data:`final_grid_points`
* :c:data:`final_grid_points_per_atom`
* :c:data:`n_points_final_grid`
* :c:data:`n_pts_per_atom`
.. c:var:: final_weight_at_r_vector
@ -309,6 +353,7 @@ Providers
* :c:data:`n_points_final_grid`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
@ -343,6 +388,69 @@ Providers
* :c:data:`one_e_dm_no_core_and_grad_alpha_in_r`
.. c:var:: final_weight_at_r_vector_per_atom
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
double precision, allocatable :: final_grid_points_per_atom (3,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: final_weight_at_r_vector_per_atom (n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom (3,n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`n_points_radial_grid`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
.. c:var:: grid_atomic_number
File : :file:`becke_numerical_grid/atomic_number.irp.f`
.. code:: fortran
integer, allocatable :: grid_atomic_number (nucl_num)
Atomic number used to adjust the grid
Needs:
.. hlist::
:columns: 3
* :c:data:`nucl_charge`
* :c:data:`nucl_num`
Needed by:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
.. c:var:: grid_points_per_atom
@ -362,10 +470,10 @@ Providers
* :c:data:`alpha_knowles`
* :c:data:`angular_quadrature_points`
* :c:data:`grid_atomic_number`
* :c:data:`grid_points_radial`
* :c:data:`m_knowles`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_charge`
* :c:data:`nucl_coord`
* :c:data:`nucl_num`
@ -375,6 +483,7 @@ Providers
:columns: 3
* :c:data:`final_grid_points`
* :c:data:`final_grid_points_per_atom`
* :c:data:`one_e_dm_alpha_in_r`
* :c:data:`weight_at_r`
@ -439,6 +548,7 @@ Providers
* :c:data:`n_points_final_grid`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
@ -473,6 +583,74 @@ Providers
* :c:data:`one_e_dm_no_core_and_grad_alpha_in_r`
.. c:var:: index_final_points_per_atom
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
double precision, allocatable :: final_grid_points_per_atom (3,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: final_weight_at_r_vector_per_atom (n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom (3,n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`n_points_radial_grid`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
.. c:var:: index_final_points_per_atom_reverse
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
double precision, allocatable :: final_grid_points_per_atom (3,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: final_weight_at_r_vector_per_atom (n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom (3,n_pts_max_per_atom,nucl_num)
integer, allocatable :: index_final_points_per_atom_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`n_points_radial_grid`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
.. c:var:: index_final_points_reverse
@ -504,6 +682,7 @@ Providers
* :c:data:`n_points_final_grid`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
@ -576,8 +755,10 @@ Providers
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
@ -681,11 +862,13 @@ Providers
* :c:data:`angular_quadrature_points`
* :c:data:`final_grid_points`
* :c:data:`final_grid_points_per_atom`
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`grid_points_radial`
* :c:data:`n_points_final_grid`
* :c:data:`n_points_grid_per_atom`
* :c:data:`n_pts_per_atom`
* :c:data:`one_e_dm_alpha_in_r`
* :c:data:`weight_at_r`
@ -721,15 +904,81 @@ Providers
* :c:data:`angular_quadrature_points`
* :c:data:`final_grid_points`
* :c:data:`final_grid_points_per_atom`
* :c:data:`final_weight_at_r`
* :c:data:`grid_points_per_atom`
* :c:data:`grid_points_radial`
* :c:data:`n_points_final_grid`
* :c:data:`n_points_grid_per_atom`
* :c:data:`n_pts_per_atom`
* :c:data:`one_e_dm_alpha_in_r`
* :c:data:`weight_at_r`
.. c:var:: n_pts_max_per_atom
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
integer, allocatable :: n_pts_per_atom (nucl_num)
integer :: n_pts_max_per_atom
Number of points which are non zero
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
* :c:data:`final_grid_points_per_atom`
.. c:var:: n_pts_per_atom
File : :file:`becke_numerical_grid/grid_becke_per_atom.irp.f`
.. code:: fortran
integer, allocatable :: n_pts_per_atom (nucl_num)
integer :: n_pts_max_per_atom
Number of points which are non zero
Needs:
.. hlist::
:columns: 3
* :c:data:`final_weight_at_r`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_num`
* :c:data:`thresh_grid`
Needed by:
.. hlist::
:columns: 3
* :c:data:`aos_in_r_array_per_atom`
* :c:data:`final_grid_points_per_atom`
.. c:var:: weight_at_r
@ -754,7 +1003,6 @@ Providers
* :c:data:`grid_points_per_atom`
* :c:data:`n_points_radial_grid`
* :c:data:`nucl_charge`
* :c:data:`nucl_coord_transp`
* :c:data:`nucl_dist_inv`
* :c:data:`nucl_num`
@ -824,7 +1072,6 @@ Subroutines / functions
* :c:data:`nucl_dist_inv`
* :c:data:`slater_bragg_type_inter_distance_ua`
* :c:data:`nucl_coord_transp`
* :c:data:`nucl_charge`
* :c:data:`nucl_num`

View File

@ -727,9 +727,40 @@ Providers
* :c:data:`c0_weight`
* :c:data:`n_states`
* :c:data:`pt2_match_weight`
* :c:data:`state_average_weight`
* :c:data:`variance_match_weight`
* :c:data:`weight_selection`
.. c:var:: variance_match_weight
File : :file:`cipsi/selection.irp.f`
.. code:: fortran
double precision, allocatable :: variance_match_weight (N_states)
Weights adjusted along the selection to make the variances
of each state coincide.
Needs:
.. hlist::
:columns: 3
* :c:data:`n_states`
Needed by:
.. hlist::
:columns: 3
* :c:data:`selection_weight`
Subroutines / functions
-----------------------
@ -879,6 +910,7 @@ Subroutines / functions
* :c:data:`selection_weight`
* :c:data:`mo_num`
* :c:data:`n_states`
* :c:data:`weight_selection`
* :c:data:`n_int`
* :c:data:`psi_det_hii`
* :c:data:`do_only_1h1p`
@ -1181,6 +1213,7 @@ Subroutines / functions
:columns: 3
* :c:data:`generators_bitmask`
* :c:data:`selection_weight`
* :c:data:`pt2_stoch_istate`
* :c:data:`psi_selectors`
* :c:data:`psi_det`
@ -1203,6 +1236,7 @@ Subroutines / functions
* :c:data:`n_det_generators`
* :c:data:`psi_det_generators`
* :c:data:`n_int`
* :c:data:`pseudo_sym`
* :c:data:`psi_det_generators`
Called by:
@ -1551,12 +1585,14 @@ Subroutines / functions
* :c:data:`correlation_energy_ratio_max`
* :c:data:`n_iter`
* :c:data:`psi_energy_with_nucl_rep`
* :c:data:`selection_factor`
* :c:data:`psi_occ_pattern`
* :c:data:`n_det_max`
* :c:data:`n_states`
* :c:data:`h_apply_buffer_allocated`
* :c:data:`n_det`
* :c:data:`s2_eig`
* :c:data:`variance_max`
* :c:data:`do_pt2`
* :c:data:`psi_energy`
* :c:data:`pt2_relative_error`
@ -1619,6 +1655,7 @@ Subroutines / functions
* :c:data:`pt2_stoch_istate`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`
* :c:data:`variance_match_weight`
.. c:function:: run_pt2_slave:
@ -1776,16 +1813,18 @@ Subroutines / functions
* :c:data:`psi_bilinear_matrix_values`
* :c:data:`psi_bilinear_matrix_transp_values`
* :c:data:`mo_num`
* :c:data:`psi_det_sorted`
* :c:data:`psi_bilinear_matrix_transp_rows_loc`
* :c:data:`n_states`
* :c:data:`pt2_f`
* :c:data:`psi_bilinear_matrix_values`
* :c:data:`elec_alpha_num`
* :c:data:`psi_bilinear_matrix_values`
* :c:data:`weight_selection`
* :c:data:`psi_bilinear_matrix_transp_values`
* :c:data:`n_int`
* :c:data:`psi_det_alpha_unique`
* :c:data:`psi_det_sorted`
* :c:data:`psi_det_sorted`
* :c:data:`pseudo_sym`
* :c:data:`psi_bilinear_matrix_columns_loc`
* :c:data:`psi_selectors_coef_transp`
@ -1859,6 +1898,7 @@ Subroutines / functions
* :c:data:`pt2_e0_denominator`
* :c:data:`pt2_stoch_istate`
* :c:data:`read_wf`
* :c:data:`selection_weight`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`
@ -1879,6 +1919,7 @@ Subroutines / functions
.. hlist::
:columns: 3
* :c:data:`selection_weight`
* :c:data:`pt2_stoch_istate`
* :c:data:`psi_det`
* :c:data:`zmq_state`
@ -1935,6 +1976,7 @@ Subroutines / functions
* :c:data:`pt2_e0_denominator`
* :c:data:`pt2_stoch_istate`
* :c:data:`selection_weight`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`
@ -1959,6 +2001,7 @@ Subroutines / functions
* :c:data:`correlation_energy_ratio_max`
* :c:data:`n_iter`
* :c:data:`psi_energy_with_nucl_rep`
* :c:data:`selection_factor`
* :c:data:`psi_occ_pattern`
* :c:data:`pt2_max`
* :c:data:`n_det_max`
@ -2028,6 +2071,7 @@ Subroutines / functions
* :c:data:`pt2_stoch_istate`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`
* :c:data:`variance_match_weight`
.. c:function:: select_connected:
@ -2351,6 +2395,43 @@ Subroutines / functions
* :c:func:`check_mem`
.. c:function:: update_pt2_and_variance_weights:
File : :file:`cipsi/selection.irp.f`
.. code:: fortran
subroutine update_pt2_and_variance_weights(pt2, variance, norm, N_st)
Updates the rPT2- and Variance- matching weights.
Needs:
.. hlist::
:columns: 3
* :c:data:`pt2_match_weight`
* :c:data:`variance_match_weight`
Called by:
.. hlist::
:columns: 3
* :c:func:`zmq_pt2`
* :c:func:`zmq_selection`
Touches:
.. hlist::
:columns: 3
* :c:data:`pt2_match_weight`
* :c:data:`variance_match_weight`
.. c:function:: zmq_pt2:
@ -2368,6 +2449,7 @@ Subroutines / functions
:columns: 3
* :c:data:`psi_det_sorted`
* :c:data:`selection_weight`
* :c:data:`pt2_stoch_istate`
* :c:data:`psi_selectors`
* :c:data:`psi_bilinear_matrix_values`
@ -2378,7 +2460,7 @@ Subroutines / functions
* :c:data:`state_average_weight`
* :c:data:`n_det`
* :c:data:`s2_eig`
* :c:data:`pt2_match_weight`
* :c:data:`psi_det_sorted`
* :c:data:`pt2_j`
* :c:data:`mo_two_e_integrals_in_map`
* :c:data:`psi_bilinear_matrix_transp_values`
@ -2396,7 +2478,7 @@ Subroutines / functions
* :c:data:`threshold_generators`
* :c:data:`psi_det_beta_unique`
* :c:data:`det_to_occ_pattern`
* :c:data:`psi_det_sorted`
* :c:data:`global_selection_buffer`
* :c:data:`psi_bilinear_matrix_transp_rows_loc`
* :c:data:`n_states`
* :c:data:`pt2_f`
@ -2405,7 +2487,7 @@ Subroutines / functions
* :c:data:`n_int`
* :c:data:`psi_det_hii`
* :c:data:`pt2_j`
* :c:data:`global_selection_buffer`
* :c:data:`pseudo_sym`
* :c:data:`pt2_w`
* :c:data:`pt2_u`
@ -2434,6 +2516,7 @@ Subroutines / functions
* :c:func:`pt2_slave_inproc`
* :c:func:`remove_duplicates_in_selection_buffer`
* :c:func:`resident_memory`
* :c:func:`update_pt2_and_variance_weights`
* :c:func:`write_double`
* :c:func:`write_int`
* :c:func:`zmq_selection`
@ -2453,6 +2536,7 @@ Subroutines / functions
* :c:data:`pt2_match_weight`
* :c:data:`pt2_stoch_istate`
* :c:data:`state_average_weight`
* :c:data:`variance_match_weight`
.. c:function:: zmq_selection:
@ -2472,12 +2556,12 @@ Subroutines / functions
:columns: 3
* :c:data:`psi_det_sorted`
* :c:data:`selection_weight`
* :c:data:`psi_selectors`
* :c:data:`psi_bilinear_matrix_values`
* :c:data:`n_det`
* :c:data:`psi_bilinear_matrix_columns_loc`
* :c:data:`n_det_selectors`
* :c:data:`psi_bilinear_matrix_transp_values`
* :c:data:`psi_det_alpha_unique`
* :c:data:`psi_bilinear_matrix_transp_values`
* :c:data:`state_average_weight`
@ -2493,8 +2577,9 @@ Subroutines / functions
* :c:data:`n_states`
* :c:data:`pt2_f`
* :c:data:`n_det_generators`
* :c:data:`pt2_match_weight`
* :c:data:`psi_bilinear_matrix_transp_values`
* :c:data:`n_int`
* :c:data:`pseudo_sym`
Called by:
@ -2519,6 +2604,7 @@ Subroutines / functions
* :c:func:`save_wavefunction`
* :c:func:`selection_collector`
* :c:func:`selection_slave_inproc`
* :c:func:`update_pt2_and_variance_weights`
* :c:func:`write_double`
Touches:
@ -2534,4 +2620,5 @@ Subroutines / functions
* :c:data:`psi_det_size`
* :c:data:`psi_det_sorted_bit`
* :c:data:`pt2_match_weight`
* :c:data:`variance_match_weight`

View File

@ -1756,6 +1756,40 @@ Subroutines / functions
* :c:func:`i_wee_j_single`
.. c:function:: print_energy_components:
File : :file:`davidson/print_e_components.irp.f`
.. code:: fortran
subroutine print_energy_components()
Prints the different components of the energy.
Needs:
.. hlist::
:columns: 3
* :c:data:`mo_integrals_n_e`
* :c:data:`n_states`
* :c:data:`mo_pseudo_integrals`
* :c:data:`mo_kinetic_integrals`
* :c:data:`mo_num`
* :c:data:`nuclear_repulsion`
* :c:data:`psi_energy`
* :c:data:`one_e_dm_mo_alpha`
Called by:
.. hlist::
:columns: 3
* :c:func:`print_summary`
.. c:function:: u_0_h_u_0:

View File

@ -61,12 +61,18 @@ EZFIO parameters
Default: True
.. option:: used_weight
.. option:: weight_one_e_dm
Weight used in the calculation of the one-electron density matrix. 0: 1./(c_0^2), 1: 1/N_states, 2: input state-average weight, 3: 1/(Norm_L3(Psi))
Default: 1
.. option:: weight_selection
Weight used in the selection. 0: input state-average weight, 1: 1./(c_0^2), 2: rPT2 matching, 3: variance matching, 4: variance and rPT2 matching, 5: variance minimization and matching
Default: 2
.. option:: threshold_generators
Thresholds on generators (fraction of the square of the norm)
@ -119,6 +125,12 @@ EZFIO parameters
Weight of the states in state-average calculations.
.. option:: selection_factor
f such that the number of determinants to add is f * N_det * sqrt(N_states)
Default: 1.
.. option:: thresh_sym
Thresholds to check if a determinant is connected with HF
@ -3638,7 +3650,7 @@ Providers
* :c:data:`c0_weight`
* :c:data:`n_states`
* :c:data:`used_weight`
* :c:data:`weight_one_e_dm`
Needed by:
@ -3648,6 +3660,7 @@ Providers
* :c:data:`det_alpha_norm`
* :c:data:`one_e_dm_mo_alpha_average`
* :c:data:`psi_average_norm_contrib`
* :c:data:`selection_weight`
.. c:var:: weight_occ_pattern

View File

@ -199,6 +199,70 @@ Providers
* :c:data:`potential_xc_alpha_ao_sr_lda`
.. c:var:: aos_in_r_array_per_atom
File : :file:`dft_utils_in_r/ao_in_r.irp.f`
.. code:: fortran
double precision, allocatable :: aos_in_r_array_per_atom (ao_num,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: aos_in_r_array_per_atom_transp (n_pts_max_per_atom,ao_num,nucl_num)
aos_in_r_array_per_atom(i,j,k) = value of the ith ao on the jth grid point attached on the kth atom
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_coef_normalized_ordered_transp_per_nucl`
* :c:data:`ao_expo_ordered_transp_per_nucl`
* :c:data:`ao_num`
* :c:data:`ao_power_ordered_transp_per_nucl`
* :c:data:`ao_prim_num`
* :c:data:`final_grid_points_per_atom`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_aos_transposed`
* :c:data:`nucl_coord`
* :c:data:`nucl_n_aos`
* :c:data:`nucl_num`
.. c:var:: aos_in_r_array_per_atom_transp
File : :file:`dft_utils_in_r/ao_in_r.irp.f`
.. code:: fortran
double precision, allocatable :: aos_in_r_array_per_atom (ao_num,n_pts_max_per_atom,nucl_num)
double precision, allocatable :: aos_in_r_array_per_atom_transp (n_pts_max_per_atom,ao_num,nucl_num)
aos_in_r_array_per_atom(i,j,k) = value of the ith ao on the jth grid point attached on the kth atom
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_coef_normalized_ordered_transp_per_nucl`
* :c:data:`ao_expo_ordered_transp_per_nucl`
* :c:data:`ao_num`
* :c:data:`ao_power_ordered_transp_per_nucl`
* :c:data:`ao_prim_num`
* :c:data:`final_grid_points_per_atom`
* :c:data:`n_pts_per_atom`
* :c:data:`nucl_aos_transposed`
* :c:data:`nucl_coord`
* :c:data:`nucl_n_aos`
* :c:data:`nucl_num`
.. c:var:: aos_in_r_array_transp

View File

@ -146,6 +146,7 @@ Providers
* :c:data:`read_wf`
* :c:data:`s2_eig`
* :c:data:`scf_algorithm`
* :c:data:`selection_factor`
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`thresh_scf`
@ -153,8 +154,9 @@ Providers
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
* :c:data:`threshold_generators`
* :c:data:`used_weight`
* :c:data:`variance_max`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
.. c:var:: ezfio_work_dir
@ -296,6 +298,7 @@ Providers
* :c:data:`read_wf`
* :c:data:`s2_eig`
* :c:data:`scf_algorithm`
* :c:data:`selection_factor`
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`thresh_scf`
@ -303,8 +306,9 @@ Providers
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
* :c:data:`threshold_generators`
* :c:data:`used_weight`
* :c:data:`variance_max`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
.. c:var:: output_wall_time_0
@ -411,6 +415,7 @@ Providers
* :c:data:`read_wf`
* :c:data:`s2_eig`
* :c:data:`scf_algorithm`
* :c:data:`selection_factor`
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`thresh_scf`
@ -418,8 +423,9 @@ Providers
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
* :c:data:`threshold_generators`
* :c:data:`used_weight`
* :c:data:`variance_max`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
.. c:var:: qp_kill_filename
@ -764,6 +770,7 @@ Subroutines / functions
* :c:func:`roothaan_hall_scf`
* :c:data:`s2_eig`
* :c:data:`scf_algorithm`
* :c:data:`selection_factor`
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`thresh_scf`
@ -771,8 +778,9 @@ Subroutines / functions
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
* :c:data:`threshold_generators`
* :c:data:`used_weight`
* :c:data:`variance_max`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
Calls:

View File

@ -160,6 +160,13 @@ Subroutines / functions
* :c:func:`run_cipsi`
* :c:func:`run_stochastic_cipsi`
Calls:
.. hlist::
:columns: 3
* :c:func:`print_energy_components`
.. c:function:: save_iterations:

View File

@ -174,6 +174,7 @@ Providers
* :c:data:`read_wf`
* :c:data:`s2_eig`
* :c:data:`scf_algorithm`
* :c:data:`selection_factor`
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`thresh_scf`
@ -181,8 +182,9 @@ Providers
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
* :c:data:`threshold_generators`
* :c:data:`used_weight`
* :c:data:`variance_max`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
.. c:var:: mpi_rank

View File

@ -103,6 +103,8 @@ Index of Providers
* :c:data:`aos_grad_in_r_array_transp`
* :c:data:`aos_grad_in_r_array_transp_xyz`
* :c:data:`aos_in_r_array`
* :c:data:`aos_in_r_array_per_atom`
* :c:data:`aos_in_r_array_per_atom_transp`
* :c:data:`aos_in_r_array_transp`
* :c:data:`aos_lapl_in_r_array`
* :c:data:`aos_lapl_in_r_array_transp`
@ -251,8 +253,10 @@ Index of Providers
* :c:data:`fact_inv`
* :c:data:`file_lock`
* :c:data:`final_grid_points`
* :c:data:`final_grid_points_per_atom`
* :c:data:`final_weight_at_r`
* :c:data:`final_weight_at_r_vector`
* :c:data:`final_weight_at_r_vector_per_atom`
* :c:data:`fock_matrix_alpha_no_xc_ao`
* :c:data:`fock_matrix_ao`
* :c:data:`fock_matrix_ao_alpha`
@ -282,6 +286,7 @@ Index of Providers
* :c:data:`give_polynomial_mult_center_one_e_erf_opt`
* :c:data:`global_selection_buffer`
* :c:data:`global_selection_buffer_lock`
* :c:data:`grid_atomic_number`
* :c:data:`grid_points_per_atom`
* :c:data:`grid_points_radial`
* :c:data:`grid_type_sgn`
@ -313,6 +318,8 @@ Index of Providers
* :c:data:`inact_bitmask`
* :c:data:`inact_virt_bitmask`
* :c:data:`index_final_points`
* :c:data:`index_final_points_per_atom`
* :c:data:`index_final_points_per_atom_reverse`
* :c:data:`index_final_points_reverse`
* :c:data:`index_holes_bitmask`
* :c:data:`index_particl_bitmask`
@ -460,6 +467,8 @@ Index of Providers
* :c:data:`n_points_radial_grid`
* :c:data:`n_pt_max_i_x`
* :c:data:`n_pt_max_integrals`
* :c:data:`n_pts_max_per_atom`
* :c:data:`n_pts_per_atom`
* :c:data:`n_single_exc_bitmasks`
* :c:data:`n_states`
* :c:data:`n_states_diag`
@ -754,6 +763,7 @@ Index of Providers
* :c:data:`selection_criterion`
* :c:data:`selection_criterion_factor`
* :c:data:`selection_criterion_min`
* :c:data:`selection_factor`
* :c:data:`selection_weight`
* :c:data:`short_range_hartree`
* :c:data:`short_range_hartree_operator`
@ -775,6 +785,7 @@ Index of Providers
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`theta_angular_integration_lebedev`
* :c:data:`thresh_grid`
* :c:data:`thresh_scf`
* :c:data:`thresh_sym`
* :c:data:`threshold_davidson`
@ -792,11 +803,14 @@ Index of Providers
* :c:data:`unpaired_alpha_electrons`
* :c:data:`used_weight`
* :c:data:`var_pt2_ratio`
* :c:data:`variance_match_weight`
* :c:data:`variance_max`
* :c:data:`virt_bitmask`
* :c:data:`virt_bitmask_4`
* :c:data:`weight_at_r`
* :c:data:`weight_occ_pattern`
* :c:data:`weight_one_e_dm`
* :c:data:`weight_selection`
* :c:data:`weights_angular_integration_lebedev`
* :c:data:`weights_angular_points`
* :c:data:`write_ao_integrals_e_n`
@ -1033,6 +1047,8 @@ Index of Subroutines/Functions
* :c:func:`get_ao_two_e_integrals_erf`
* :c:func:`get_ao_two_e_integrals_erf_non_zero`
* :c:func:`get_ao_two_e_integrals_non_zero`
* :c:func:`get_ao_two_e_integrals_non_zero_jl`
* :c:func:`get_ao_two_e_integrals_non_zero_jl_from_list`
* :c:func:`get_d0`
* :c:func:`get_d1`
* :c:func:`get_d2`
@ -1280,6 +1296,7 @@ Index of Subroutines/Functions
* :c:func:`print_ci_vectors`
* :c:func:`print_det`
* :c:func:`print_e_conv`
* :c:func:`print_energy_components`
* :c:func:`print_extrapolated_energy`
* :c:func:`print_generators_bitmasks_holes`
* :c:func:`print_generators_bitmasks_holes_for_one_generator`
@ -1418,6 +1435,7 @@ Index of Subroutines/Functions
* :c:func:`u_0_s2_u_0`
* :c:func:`u_dot_u`
* :c:func:`u_dot_v`
* :c:func:`update_pt2_and_variance_weights`
* :c:func:`v_e_n`
* :c:func:`v_grad_rho_oc_to_v_grad_rho_ab`
* :c:func:`v_phi`

View File

@ -89,5 +89,7 @@ fci
* :c:data:`pt2_match_weight`
* :c:data:`pt2_stoch_istate`
* :c:data:`read_wf`
* :c:data:`selection_weight`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`
* :c:data:`variance_match_weight`

View File

@ -55,5 +55,6 @@ pt2
* :c:data:`pt2_e0_denominator`
* :c:data:`pt2_stoch_istate`
* :c:data:`read_wf`
* :c:data:`selection_weight`
* :c:data:`state_average_weight`
* :c:data:`threshold_generators`

View File

@ -0,0 +1,37 @@
.. _rotate_mos:
.. program:: rotate_mos
==========
rotate_mos
==========
Rotates molecular orbitals i and j by combining them as
$1/\sqrt{2} ( \phi_i + \phi_j )$ and
$1/\sqrt{2} ( \phi_i - \phi_j )$.
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`mo_num`
* :c:data:`mo_coef`
Calls:
.. hlist::
:columns: 3
* :c:func:`save_mos`
Touches:
.. hlist::
:columns: 3
* :c:data:`mo_coef`

View File

@ -0,0 +1,39 @@
.. _sort_by_fock_energies:
.. program:: sort_by_fock_energies
=====================
sort_by_fock_energies
=====================
Program that saves the current |MOs| ordered by diagonal element of the Fock operator.
Warning : the Fock operator, and therefore its matrix elements, depends on the occupancy.
Needs:
.. hlist::
:columns: 3
* :c:data:`fock_matrix_mo`
* :c:data:`ao_num`
* :c:data:`mo_num`
* :c:data:`mo_coef`
Calls:
.. hlist::
:columns: 3
* :c:func:`dsort`
* :c:func:`save_mos`
Touches:
.. hlist::
:columns: 3
* :c:data:`mo_coef`

View File

@ -0,0 +1,27 @@
.. _swap_mos:
.. program:: swap_mos
========
swap_mos
========
Swaps the indices of two molecular orbitals
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`mo_coef`
Calls:
.. hlist::
:columns: 3
* :c:func:`save_mos`

View File

@ -0,0 +1,19 @@
.. _test:
.. program:: test
====
test
====
Calls:
.. hlist::
:columns: 3
* :c:func:`two_e_integrals_index`
* :c:func:`two_e_integrals_index_reverse`

View File

@ -28,18 +28,22 @@
year = 2019,
month = {may},
publisher = {American Chemical Society ({ACS})},
author = {Pierre-Francois Loos and Bartélémy Pradines and Anthony Scemama and Julien Toulouse and Emmanuel Giner},
title = {A Density-Based Basis-Set Correction For Wave Function Theory},
volume = {10},
number = {11},
pages = {2931--2937},
author = {Pierre-Fran{\c{c}}ois Loos and Barth{\'{e}}l{\'{e}}my Pradines and Anthony Scemama and Julien Toulouse and Emmanuel Giner},
title = {A Density-Based Basis-Set Correction for Wave Function Theory},
journal = {The Journal of Physical Chemistry Letters}
}
@article{Garniron_2019,
doi = {10.1021/acs.jctc.9b00176},
url = {https://doi.org/10.1021%2Facs.jctc.9b00176},
year = 2019,
month = {may},
publisher = {American Chemical Society ({ACS})},
author = {Yann Garniron and Thomas Applencourt and Kevin Gasperich and Anouar Benali and Anthony Ferte and Julien Paquier and Bartélémy Pradines and Roland Assaraf and Peter Reinhardt and Julien Toulouse and Pierrette Barbaresco and Nicolas Renon and Gregoire David and Jean-Paul Malrieu and Mickael Veril and Michel Caffarel and Pierre-Francois Loos and Emmanuel Giner and Anthony Scemama},
author = {Yann Garniron and Thomas Applencourt and Kevin Gasperich and Anouar Benali and Anthony Fert{\'{e}} and Julien Paquier and Barth{\'{e}}l{\'{e}}my Pradines and Roland Assaraf and Peter Reinhardt and Julien Toulouse and Pierrette Barbaresco and Nicolas Renon and Gr{\'{e}}goire David and Jean-Paul Malrieu and Mickaël V{\'{e}}ril and Michel Caffarel and Pierre-Fran{\c{c}}ois Loos and Emmanuel Giner and Anthony Scemama},
title = {Quantum Package 2.0: An Open-Source Determinant-Driven Suite of Programs},
journal = {Journal of Chemical Theory and Computation}
}

View File

@ -0,0 +1,89 @@
.. _qp_tunnel:
=========
qp_tunnel
=========
.. TODO
.. program:: qp_tunnel
Establishes a tunnel to allow communications between machines within
different networks, for example multiple MPI slave jobs running on
different clusters.
Usage
-----
.. code:: bash
qp_tunnel [-g] (ADDRESS|EZFIO_DIR)
``EZFIO_DIR`` is the name of the |EZFIO| directory containing the data,
and ``ADDRESS`` is the address of another tunnel.
.. option:: -h, --help
Displays the help message
.. option:: -g, --get-input
Download the EZFIO directory from the remote instance of qp_tunnel.
Example
-------
.. code:: text
+-------------------+ +------------------+
| | | |
| N1_1 N1_2 N1_3 | | N2_1 N2_2 N2_3 |
| | | | | | | | | |
| +----+----+ | | +----+----+ |
| | | | | |
| C1 F1 | | F2 C2 |
| +---------=----=--------+ |
| | | |
+-------------------+ +------------------+
Imagine you have two clusters, C1 and C2. Each cluster is accessible via SSH
on a front-end named respectively F1 and F2. Groups of nodes N1 and N2 have
been reserved by the batch scheduling system on both clusters.
Each node in N1 is on the same network as the other nodes of N1, but they
can't access the network on which the nodes of N2 are.
1) Start a parallel simulation on the cluster C1, running on nodes N1.
We assume that there is a shared file system, such that F1 can access
the EZFIO directory. We also assume that F1 can communicate with the
nodes of N1.
2) Run a tunnel on the front-end F1 and keep it running:
.. code:: bash
me@f1 $ qp_tunnel my_directory.ezfio
Connect to:
tcp://31.122.230.47:42379
Ready
3) On the front-end F2, run another instance connecting to the other one,
which will fetch the |EZFIO| directory:
.. code:: bash
me@f2 $ qp_tunnel --get-input tcp://31.122.230.47:42379
Connect to:
tcp://31.122.209.139:42379
Communication [ OK ]
Getting input... my_directory.ezfio ...done
Ready
4) Keep the tunnel running, and you can now run a slave simulation within the
nodes N2.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CIS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "CIS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
cis \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CISD" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "CISD" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
cisd \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CONFIGURE" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "CONFIGURE" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
configure \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "DIAGONALIZE_H" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "DIAGONALIZE_H" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
diagonalize_h \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "EXCITED_STATES" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "EXCITED_STATES" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
excited_states \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "FCI" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "FCI" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
fci \- | Quantum Package >
.
@ -125,10 +125,10 @@ Touches:
\fBpsi_occ_pattern\fP
.IP \(bu 2
\fBc0_weight\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBdistributed_davidson\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBpsi_coef\fP
.IP \(bu 2
@ -143,10 +143,10 @@ Touches:
\fBpsi_energy\fP
.IP \(bu 2
\fBpsi_occ_pattern\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBpsi_energy\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBpt2_e0_denominator\fP
.IP \(bu 2
@ -156,9 +156,13 @@ Touches:
.IP \(bu 2
\fBread_wf\fP
.IP \(bu 2
\fBselection_weight\fP
.IP \(bu 2
\fBstate_average_weight\fP
.IP \(bu 2
\fBthreshold_generators\fP
.IP \(bu 2
\fBvariance_match_weight\fP
.UNINDENT
.UNINDENT
.UNINDENT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "FCIDUMP" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "FCIDUMP" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
fcidump \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "FOUR_IDX_TRANSFORM" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "FOUR_IDX_TRANSFORM" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
four_idx_transform \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "INTERFACES" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "INTERFACES" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
interfaces \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "KS_SCF" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "KS_SCF" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
ks_scf \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "MOLDEN" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "MOLDEN" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
molden \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "NATURAL_ORBITALS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "NATURAL_ORBITALS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
natural_orbitals \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PLUGINS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PLUGINS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
plugins \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PRINT_CI_VECTORS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PRINT_CI_VECTORS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
print_ci_vectors \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PRINT_E_CONV" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PRINT_E_CONV" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
print_e_conv \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PRINT_WF" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PRINT_WF" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
print_wf \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PRINTING" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PRINTING" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
printing \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PT2" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "PT2" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
pt2 \- | Quantum Package >
.
@ -104,6 +104,8 @@ Touches:
.IP \(bu 2
\fBread_wf\fP
.IP \(bu 2
\fBselection_weight\fP
.IP \(bu 2
\fBstate_average_weight\fP
.IP \(bu 2
\fBthreshold_generators\fP

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_convert_output_to_ezfio \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_CREATE_EZFIO" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_CREATE_EZFIO" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_create_ezfio \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_EDIT" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_EDIT" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_edit \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_EXPORT_AS_TGZ" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_EXPORT_AS_TGZ" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_export_as_tgz \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_PLUGINS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_PLUGINS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_plugins \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_RESET" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_RESET" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_reset \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_RUN" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_RUN" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_run \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_SET_FROZEN_CORE" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_SET_FROZEN_CORE" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_set_frozen_core \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_SET_MO_CLASS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_SET_MO_CLASS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_set_mo_class \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_STOP" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_STOP" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_stop \- | Quantum Package >
.

139
man/qp_tunnel.1 Normal file
View File

@ -0,0 +1,139 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_TUNNEL" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_tunnel \- | Quantum Package >
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.sp
Establishes a tunnel to allow communications between machines within
different networks, for example multiple MPI slave jobs running on
different clusters.
.SH USAGE
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
qp_tunnel [\-g] (ADDRESS|EZFIO_DIR)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBEZFIO_DIR\fP is the name of the \fI\%EZFIO\fP directory containing the data,
and \fBADDRESS\fP is the address of another tunnel.
.INDENT 0.0
.TP
.B \-h, \-\-help
Displays the help message
.UNINDENT
.INDENT 0.0
.TP
.B \-g, \-\-get\-input
Download the EZFIO directory from the remote instance of qp_tunnel.
.UNINDENT
.SH EXAMPLE
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| | | |
| N1_1 N1_2 N1_3 | | N2_1 N2_2 N2_3 |
| | | | | | | | | |
| +\-\-\-\-+\-\-\-\-+ | | +\-\-\-\-+\-\-\-\-+ |
| | | | | |
| C1 F1 | | F2 C2 |
| +\-\-\-\-\-\-\-\-\-=\-\-\-\-=\-\-\-\-\-\-\-\-+ |
| | | |
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Imagine you have two clusters, C1 and C2. Each cluster is accessible via SSH
on a front\-end named respectively F1 and F2. Groups of nodes N1 and N2 have
been reserved by the batch scheduling system on both clusters.
Each node in N1 is on the same network as the other nodes of N1, but they
cant access the network on which the nodes of N2 are.
.INDENT 0.0
.IP 1. 3
Start a parallel simulation on the cluster C1, running on nodes N1.
We assume that there is a shared file system, such that F1 can access
the EZFIO directory. We also assume that F1 can communicate with the
nodes of N1.
.IP 2. 3
Run a tunnel on the front\-end F1 and keep it running:
.UNINDENT
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
me@f1 $ qp_tunnel my_directory.ezfio
Connect to:
tcp://31.122.230.47:42379
Ready
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
.IP 3. 3
On the front\-end F2, run another instance connecting to the other one,
which will fetch the \fI\%EZFIO\fP directory:
.UNINDENT
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
me@f2 $ qp_tunnel \-\-get\-input tcp://31.122.230.47:42379
Connect to:
tcp://31.122.209.139:42379
Communication [ OK ]
Getting input... my_directory.ezfio ...done
Ready
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
.IP 4. 3
Keep the tunnel running, and you can now run a slave simulation within the
nodes N2.
.UNINDENT
.SH AUTHOR
A. Scemama, E. Giner
.SH COPYRIGHT
2019, A. Scemama, E. Giner
.\" Generated by docutils manpage writer.
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QP_UPDATE" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QP_UPDATE" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qp_update \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "QPSH" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "QPSH" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
qpsh \- | Quantum Package >
.

85
man/rotate_mos.1 Normal file
View File

@ -0,0 +1,85 @@
.\" Man page generated from reStructuredText.
.
.TH "ROTATE_MOS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
rotate_mos \- | Quantum Package >
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.INDENT 0.0
.INDENT 3.5
Rotates molecular orbitals i and j by combining them as
$1/sqrt{2} ( phi_i + phi_j )$ and
$1/sqrt{2} ( phi_i - phi_j )$.
.sp
Needs:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBao_num\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBmo_num\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBmo_coef\fP
.UNINDENT
.UNINDENT
.sp
Calls:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBsave_mos()\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.sp
Touches:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBmo_coef\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SH AUTHOR
A. Scemama, E. Giner
.SH COPYRIGHT
2019, A. Scemama, E. Giner
.\" Generated by docutils manpage writer.
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "RS_KS_SCF" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "RS_KS_SCF" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
rs_ks_scf \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "SAVE_NATORB" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "SAVE_NATORB" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
save_natorb \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "SAVE_ONE_E_DM" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "SAVE_ONE_E_DM" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
save_one_e_dm \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "SAVE_ORTHO_MOS" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "SAVE_ORTHO_MOS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
save_ortho_mos \- | Quantum Package >
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "SCF" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "SCF" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
scf \- | Quantum Package >
.

View File

@ -0,0 +1,89 @@
.\" Man page generated from reStructuredText.
.
.TH "SORT_BY_FOCK_ENERGIES" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
sort_by_fock_energies \- | Quantum Package >
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.INDENT 0.0
.INDENT 3.5
Program that saves the current MOs ordered by diagonal element of the Fock operator.
.sp
Warning : the Fock operator, and therefore its matrix elements, depends on the occupancy.
.sp
Needs:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBfock_matrix_mo\fP
.IP \(bu 2
\fBao_num\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBmo_num\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBmo_coef\fP
.UNINDENT
.UNINDENT
.sp
Calls:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBdsort()\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBsave_mos()\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.sp
Touches:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBmo_coef\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SH AUTHOR
A. Scemama, E. Giner
.SH COPYRIGHT
2019, A. Scemama, E. Giner
.\" Generated by docutils manpage writer.
.

69
man/swap_mos.1 Normal file
View File

@ -0,0 +1,69 @@
.\" Man page generated from reStructuredText.
.
.TH "SWAP_MOS" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
swap_mos \- | Quantum Package >
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.INDENT 0.0
.INDENT 3.5
Swaps the indices of two molecular orbitals
.sp
Needs:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBao_num\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBmo_coef\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.sp
Calls:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBsave_mos()\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SH AUTHOR
A. Scemama, E. Giner
.SH COPYRIGHT
2019, A. Scemama, E. Giner
.\" Generated by docutils manpage writer.
.

55
man/test.1 Normal file
View File

@ -0,0 +1,55 @@
.\" Man page generated from reStructuredText.
.
.TH "TEST" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
test \- | Quantum Package >
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.INDENT 0.0
.INDENT 3.5
Calls:
.INDENT 0.0
.INDENT 2.0
.IP \(bu 2
\fBtwo_e_integrals_index()\fP
.UNINDENT
.INDENT 2.0
.IP \(bu 2
\fBtwo_e_integrals_index_reverse()\fP
.UNINDENT
.INDENT 2.0
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SH AUTHOR
A. Scemama, E. Giner
.SH COPYRIGHT
2019, A. Scemama, E. Giner
.\" Generated by docutils manpage writer.
.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "WRITE_INTEGRALS_ERF" "1" "May 28, 2019" "2.0" "Quantum Package"
.TH "WRITE_INTEGRALS_ERF" "1" "Jun 15, 2019" "2.0" "Quantum Package"
.SH NAME
write_integrals_erf \- | Quantum Package >
.

View File

@ -1,4 +1,4 @@
PKG core ZMQ cryptokit
PKG core zmq cryptokit
B _build/

402
ocaml/qp_tunnel.ml Normal file
View File

@ -0,0 +1,402 @@
open Qputils
open Qptypes
type ezfio_or_address = EZFIO of string | ADDRESS of string
type req_or_sub = REQ | SUB
let localport = 42379
let () =
let open Command_line in
begin
"Creates an ssh tunnel for using slaves on another network. Launch a server on the front-end node of the cluster on which the master process runs. Then start a client ont the front-end node of the distant cluster."
|> set_footer_doc ;
[ { short='g' ; long="get-input" ; opt=Optional ;
doc="Downloads the EZFIO directory." ;
arg=Without_arg; } ;
anonymous
"(EZFIO_DIR|ADDRESS)"
Mandatory
"EZFIO directory or address.";
] |> set_specs
end;
let arg =
let x =
match Command_line.anon_args () with
| [x] -> x
| _ -> begin
Command_line.help () ;
failwith "EZFIO_FILE or ADDRESS is missing"
end
in
if Sys.file_exists x && Sys.is_directory x then
EZFIO x
else
ADDRESS x
in
let localhost =
Lazy.force TaskServer.ip_address
in
let long_address =
match arg with
| ADDRESS x -> x
| EZFIO x ->
let ic =
Filename.concat (Qpackage.ezfio_work x) "qp_run_address"
|> open_in
in
let result =
input_line ic
|> String.trim
in
close_in ic;
result
in
let protocol, address, port =
match String.split_on_char ':' long_address with
| t :: a :: p :: [] -> t, a, int_of_string p
| _ -> failwith @@
Printf.sprintf "%s : Malformed address" long_address
in
let zmq_context =
Zmq.Context.create ()
in
(** Check availability of the ports *)
let localport =
let dummy_socket =
Zmq.Socket.create zmq_context Zmq.Socket.rep
in
let rec try_new_port port_number =
try
List.iter (fun i ->
let address =
Printf.sprintf "tcp://%s:%d" localhost (port_number+i)
in
Zmq.Socket.bind dummy_socket address;
Zmq.Socket.unbind dummy_socket address
) [ 0;1;2;3;4;5;6;7;8;9 ] ;
port_number
with
| Unix.Unix_error _ -> try_new_port (port_number+100)
in
let result =
try_new_port localport
in
Zmq.Socket.close dummy_socket;
result
in
let create_socket sock_type bind_or_connect addr =
let socket =
Zmq.Socket.create zmq_context sock_type
in
let () =
try
bind_or_connect socket addr
with
| _ -> failwith @@
Printf.sprintf "Unable to establish connection to %s." addr
in
socket
in
(* Handle termination *)
let run_status = ref true in
let handler =
Sys.Signal_handle (fun signum ->
run_status := false;
Sys.set_signal signum Sys.Signal_default
)
in
Sys.set_signal Sys.sigusr1 handler;
Sys.set_signal Sys.sigint handler;
let new_thread req_or_sub addr_in addr_out =
let socket_in, socket_out =
match req_or_sub with
| REQ ->
create_socket Zmq.Socket.rep Zmq.Socket.bind addr_in,
create_socket Zmq.Socket.req Zmq.Socket.connect addr_out
| SUB ->
create_socket Zmq.Socket.sub Zmq.Socket.connect addr_in,
create_socket Zmq.Socket.pub Zmq.Socket.bind addr_out
in
if req_or_sub = SUB then
Zmq.Socket.subscribe socket_in "";
let action =
match req_or_sub with
| REQ -> (fun () ->
Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out;
Zmq.Socket.recv_all socket_out |> Zmq.Socket.send_all socket_in )
| SUB -> (fun () ->
Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out)
in
let pollitem =
Zmq.Poll.mask_of
[| (socket_in, Zmq.Poll.In) |]
in
while !run_status do
let polling =
Zmq.Poll.poll ~timeout:1000 pollitem
in
match polling.(0) with
| Some Zmq.Poll.In -> action ()
| None -> ()
| Some Zmq.Poll.In_out
| Some Zmq.Poll.Out -> ()
done;
Zmq.Socket.close socket_in;
Zmq.Socket.close socket_out;
in
let ocaml_thread =
let addr_out =
Printf.sprintf "tcp:%s:%d" address port
in
let addr_in =
Printf.sprintf "tcp://*:%d" localport
in
let f () =
new_thread REQ addr_in addr_out
in
(Thread.create f) ()
in
Printf.printf "Connect to:\ntcp://%s:%d\n%!" localhost localport;
let fortran_thread =
let addr_out =
Printf.sprintf "tcp:%s:%d" address (port+2)
in
let addr_in =
Printf.sprintf "tcp://*:%d" (localport+2)
in
let f () =
new_thread REQ addr_in addr_out
in
(Thread.create f) ()
in
let pub_thread =
let addr_in =
Printf.sprintf "tcp:%s:%d" address (port+1)
in
let addr_out =
Printf.sprintf "tcp://*:%d" (localport+1)
in
let f () =
new_thread SUB addr_in addr_out
in
(Thread.create f) ()
in
let input_thread =
let f () =
let addr_out =
match arg with
| EZFIO _ -> None
| ADDRESS _ -> Some (
Printf.sprintf "tcp:%s:%d" address (port+9) )
in
let addr_in =
Printf.sprintf "tcp://*:%d" (localport+9)
in
let socket_in =
create_socket Zmq.Socket.rep Zmq.Socket.bind addr_in
in
let socket_out =
match addr_out with
| Some addr_out -> Some (
create_socket Zmq.Socket.req Zmq.Socket.connect addr_out)
| None -> None
in
let temp_file =
Filename.temp_file "qp_tunnel" ".tar.gz"
in
let get_ezfio_filename () =
match arg with
| EZFIO x -> x
| ADDRESS _ ->
begin
match socket_out with
| None -> assert false
| Some socket_out -> (
Zmq.Socket.send socket_out "get_ezfio_filename" ;
Zmq.Socket.recv socket_out
)
end
in
let get_input () =
match arg with
| EZFIO x ->
begin
Printf.sprintf "tar -zcf %s %s" temp_file x
|> Sys.command |> ignore;
let fd =
Unix.openfile temp_file [Unix.O_RDONLY] 0o640
in
let len =
Unix.lseek fd 0 Unix.SEEK_END
in
ignore @@ Unix.lseek fd 0 Unix.SEEK_SET ;
let bstr =
Unix.map_file fd Bigarray.char
Bigarray.c_layout false [| len |]
|> Bigarray.array1_of_genarray
in
let result =
String.init len (fun i -> bstr.{i}) ;
in
Unix.close fd;
Sys.remove temp_file;
result
end
| ADDRESS _ ->
begin
match socket_out with
| None -> assert false
| Some socket_out -> (
Zmq.Socket.send socket_out "get_input" ;
Zmq.Socket.recv socket_out
)
end
in
let () =
match socket_out with
| None -> ()
| Some socket_out ->
Zmq.Socket.send socket_out "test";
Printf.printf "Communication [ %s ]\n%!" (Zmq.Socket.recv socket_out);
in
(* Download input if asked *)
if Command_line.get_bool "get-input" then
begin
match arg with
| EZFIO _ -> ()
| ADDRESS _ ->
begin
Printf.printf "Getting input... %!";
let ezfio_filename =
get_ezfio_filename ()
in
Printf.printf "%s%!" ezfio_filename;
let oc =
open_out temp_file
in
get_input ()
|> output_string oc;
close_out oc;
Printf.sprintf "tar -zxf %s" temp_file
|> Sys.command |> ignore ;
let oc =
Filename.concat (Qpackage.ezfio_work ezfio_filename) "qp_run_address"
|> open_out
in
Printf.fprintf oc "tcp://%s:%d\n" localhost localport;
close_out oc;
Printf.printf " ...done\n%!"
end
end;
(* Main loop *)
let pollitem =
Zmq.Poll.mask_of [| (socket_in, Zmq.Poll.In) |]
in
let action () =
match Zmq.Socket.recv socket_in with
| "get_input" -> get_input ()
|> Zmq.Socket.send socket_in
| "get_ezfio_filename" -> get_ezfio_filename ()
|> Zmq.Socket.send socket_in
| "test" -> Zmq.Socket.send socket_in "OK"
| x -> Printf.sprintf "Message '%s' not understood" x
|> Zmq.Socket.send socket_in
in
Printf.printf "Ready\n%!";
while !run_status do
let polling =
Zmq.Poll.poll ~timeout:1000 pollitem
in
match polling.(0) with
| Some Zmq.Poll.In -> action ()
| None -> ()
| Some Zmq.Poll.In_out
| Some Zmq.Poll.Out -> ()
done;
let () =
match socket_out with
| Some socket_out -> Zmq.Socket.close socket_out
| None -> ()
in
Zmq.Socket.close socket_in
in
(Thread.create f) ()
in
(* Termination *)
Thread.join input_thread;
Thread.join fortran_thread;
Thread.join pub_thread;
Thread.join ocaml_thread;
Zmq.Context.terminate zmq_context;
Printf.printf "qp_tunnel exited properly.\n"

View File

@ -1,18 +1,27 @@
program rotate_mos
implicit none
integer :: iorb,jorb
read(5,*)iorb,jorb
double precision, allocatable :: mo_coef_tmp(:,:)
allocate(mo_coef_tmp(ao_num,mo_num))
mo_coef_tmp = mo_coef
integer :: i,j
double precision :: dsqrt2_inv
dsqrt2_inv = 1.d0/dsqrt(2.d0)
do i = 1, ao_num
mo_coef(i,iorb) = dsqrt2_inv * ( mo_coef_tmp(i,iorb) + mo_coef_tmp(i,jorb) )
mo_coef(i,jorb) = dsqrt2_inv * ( mo_coef_tmp(i,iorb) - mo_coef_tmp(i,jorb) )
enddo
touch mo_coef
call save_mos
implicit none
BEGIN_DOC
! Rotates molecular orbitals i and j by combining them as
! $1/\sqrt{2} ( \phi_i + \phi_j )$ and
! $1/\sqrt{2} ( \phi_i - \phi_j )$.
END_DOC
integer :: iorb,jorb
integer :: i,j
double precision :: dsqrt2_inv
double precision, allocatable :: mo_coef_tmp(:,:)
read(5,*)iorb,jorb
allocate(mo_coef_tmp(ao_num,mo_num))
mo_coef_tmp = mo_coef
dsqrt2_inv = 1.d0/dsqrt(2.d0)
do i = 1, ao_num
mo_coef(i,iorb) = dsqrt2_inv * ( mo_coef_tmp(i,iorb) + mo_coef_tmp(i,jorb) )
mo_coef(i,jorb) = dsqrt2_inv * ( mo_coef_tmp(i,iorb) - mo_coef_tmp(i,jorb) )
enddo
touch mo_coef
call save_mos
end

View File

@ -1,32 +1,38 @@
program sort_by_fock_energies
BEGIN_DOC
! programs that save the current mos ordered by Diagonal element of the Fock operator.
!
! Warning : the Fock operator, and therefore its matrix elements, depends on the occupancy.
END_DOC
implicit none
integer :: i,j,k
integer, allocatable :: iorder(:)
double precision, allocatable :: fock_energies_tmp(:), new_mo_coef(:,:)
allocate(iorder(mo_num), fock_energies_tmp(mo_num),new_mo_coef(ao_num,mo_num))
do i = 1, mo_num
fock_energies_tmp(i) = Fock_matrix_diag_mo(i)
print*,'fock_energies_tmp(i) = ',fock_energies_tmp(i)
iorder(i) = i
enddo
print*,''
print*,'Sorting by Fock energies'
print*,''
call dsort(fock_energies_tmp,iorder,mo_num)
do i = 1, mo_num
k = iorder(i)
print*,'fock_energies_new(i) = ',fock_energies_tmp(i)
do j = 1, ao_num
new_mo_coef(j,i) = mo_coef(j,k)
enddo
enddo
mo_coef = new_mo_coef
touch mo_coef
call save_mos
BEGIN_DOC
! Program that saves the current |MOs| ordered by diagonal element of the Fock operator.
!
! Warning : the Fock operator, and therefore its matrix elements, depends on the occupancy.
END_DOC
implicit none
integer :: i,j,k
integer, allocatable :: iorder(:)
double precision, allocatable :: fock_energies_tmp(:), new_mo_coef(:,:)
allocate(iorder(mo_num), fock_energies_tmp(mo_num),new_mo_coef(ao_num,mo_num))
do i = 1, mo_num
fock_energies_tmp(i) = Fock_matrix_diag_mo(i)
print*,'fock_energies_tmp(i) = ',fock_energies_tmp(i)
iorder(i) = i
enddo
print*,''
print*,'Sorting by Fock energies'
print*,''
call dsort(fock_energies_tmp,iorder,mo_num)
do i = 1, mo_num
k = iorder(i)
print*,'fock_energies_new(i) = ',fock_energies_tmp(i)
do j = 1, ao_num
new_mo_coef(j,i) = mo_coef(j,k)
enddo
enddo
mo_coef = new_mo_coef
touch mo_coef
call save_mos
end

View File

@ -1,7 +1,10 @@
program swap_mos
implicit none
integer :: i,j, i1, i2
double precision :: x
BEGIN_DOC
! Swaps the indices of two molecular orbitals
END_DOC
integer :: i,j, i1, i2
double precision :: x
print *, 'MOs to swap?'
read(*,*) i1, i2
do i=1,ao_num
@ -10,5 +13,5 @@ program swap_mos
mo_coef(i,i2) = x
enddo
call save_mos
end

View File

@ -301,7 +301,6 @@ function new_zmq_push_socket(thread)
END_DOC
integer, intent(in) :: thread
integer :: rc
character*(8), external :: zmq_port
integer(ZMQ_PTR) :: new_zmq_push_socket
call omp_set_lock(zmq_lock)
@ -425,7 +424,6 @@ subroutine end_zmq_pair_socket(zmq_socket_pair)
END_DOC
integer(ZMQ_PTR), intent(in) :: zmq_socket_pair
integer :: rc
character*(8), external :: zmq_port
call omp_set_lock(zmq_lock)
rc = f77_zmq_close(zmq_socket_pair)
@ -445,7 +443,6 @@ subroutine end_zmq_pull_socket(zmq_socket_pull)
END_DOC
integer(ZMQ_PTR), intent(in) :: zmq_socket_pull
integer :: rc
character*(8), external :: zmq_port
! rc = f77_zmq_setsockopt(zmq_socket_pull,ZMQ_LINGER,0,4)
! if (rc /= 0) then
@ -472,7 +469,6 @@ subroutine end_zmq_push_socket(zmq_socket_push,thread)
integer, intent(in) :: thread
integer(ZMQ_PTR), intent(in) :: zmq_socket_push
integer :: rc
character*(8), external :: zmq_port
rc = f77_zmq_setsockopt(zmq_socket_push,ZMQ_LINGER,300000,4)
if (rc /= 0) then
@ -1032,7 +1028,6 @@ subroutine end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
! Terminate the socket from the application to qp_run
END_DOC
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
character*(8), external :: zmq_port
integer :: rc
rc = f77_zmq_setsockopt(zmq_to_qp_run_socket,ZMQ_LINGER,300000,4)