1. A brief description of the project

   This is the interface at Dalton/Dirac to use Gen1Int library.

   Gen1Int is a Fortran 90 library (with Python interface) to evaluate the
   derivatives of one-electron integrals with respect to the geometry perturbation,
   external electric and magnetic fields, and total rotational angular momentum
   at zero fields with contracted rotational London atomic orbitals (LAO).

   For more details about Gen1Int library, please visit

   http://repo.ctcc.no/projects/gen1int
   http://sourceforge.net/projects/gen1int

   For the idea of designing Gen1Int interface, please check file DESIGN.

2. Notes on the developer's build environment and potential portability problems

   In order to implement Gen1Int interface, we have modified the following files:

   * setup
     enables Gen1Int interface when specifying the path of Gen1Int library
   * CMakeLists.txt
     sets the corresponding compiler flag (-DBUILD_GEN1INT) and adds the source codes
     of Gen1Int library and interface
   * abacus/dalton.F (please search BUILD_GEN1INT)
     calls \fn(gen1int_host_finalize) to terminate Gen1Int interface
   * abacus/herdrv.F (please search BUILD_GEN1INT)
     calls \fn(gen1int_host_test) to perform test suite of Gen1Int interface
   * abacus/herrdn.F (please search BUILD_GEN1INT)
     some modifications for processing different ECPs, and calling
     \fn(gen1int_host_init) to initialize Gen1Int interface
   * abacus/her1car.F (please search BUILD_GEN1INT)
     removes the interface of calling old ECP subroutine
   * abacus/her1drv.F (please search BUILD_GEN1INT)
     calls \fn(gen1int_ifc_main) to calculate property integrals
   * eri/eri2par.F
     calls Gen1Int interface on worker processors
   * include/cbiher.h
     adds logical variable \var(TEST_GEN1INT) indicating if performing test suite
     of Gen1Int interface
   * include/infinp.h
     adds logical variable \var(DO_CUBE) indicating if generating cube files using
     Gen1Int library
   * include/iprtyp.h
     adds options for Gen1Int interface on worker processors
   * sirius/sirinp.F
     calls \fn(gen1int_host_cube_init) to process the information of cube file in
     DALTON.INP, and initialize the information of cube file
   * sirius/sirctl.F
     calls \fn(gen1int_host_get_cube) to generate cube files, and
     \fn(gen1int_host_cube_finalize) to free spaces taken the information of cube
     file

3. Important files in Gen1Int interface

   * CMakeLists.txt:     CMake build file

   * DESIGN:             idea of designing the interface
   * INSTALL:            installation instruction
   * MANUAL:             manual of using Gen1Int interface in host programs
   * README:             this file
   * TODO:               TODO list

   * gen1int_host.F90:   subroutines which could be called by host programs (even Fortran 77)
   * gen1int_cube.F90:   data module of cube files
   * gen1int_api.F90:    module of API of Gen1Int interface (some subroutines are host program specific)
   * gen1int_shell.F90:  module of AO sub-shell, might be portable with minor changes
   * gen1int_matrix.F90: module of matrix interface, will be replaced by QMatrix library

   * gen1int_host.h:     header file of Gen1Int interface (some of them are temporary
                         and will be replaced by those in Gen1Int library), in which
     #define REALK 8
     #define _REALK _8
     #define MPI_REALK MPI_DOUBLE_PRECISION
     are kind type parameter of real numbers (be consistent with host programs and
     Gen1Int library)     

     #define STDOUT 6
     is the logical unit number of the standard output

     #define MAX_LEN_STR 80
     is the maximum length of a string

     #if defined(VAR_MPI)
     #define MANAGER 0
     #define REQUEST_WORK 0
     #define NO_MORE_WORK 0
     #endif
     are used for MPI parallelization, MANAGER is the rank of manager processor,
     REQUEST_WORK means workers request new work from manager, NO_MORE_WORK means
     there is no more calculation for workers

4. Please see INSTALL for installation instructions

5. Please check file MANUAL for the use of Gen1Int interface and Gen1Int library
