~ubuntu-branches/ubuntu/utopic/nwchem/utopic

« back to all changes in this revision

Viewing changes to src/NWints/api/intd_mpolel.F

  • Committer: Package Import Robot
  • Author(s): Michael Banck, Daniel Leidert, Andreas Tille, Michael Banck
  • Date: 2013-07-04 12:14:55 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20130704121455-5tvsx2qabor3nrui
Tags: 6.3-1
* New upstream release.
* Fixes anisotropic properties (Closes: #696361).
* New features include:
  + Multi-reference coupled cluster (MRCC) approaches
  + Hybrid DFT calculations with short-range HF 
  + New density-functionals including Minnesota (M08, M11) and HSE hybrid
    functionals
  + X-ray absorption spectroscopy (XAS) with TDDFT
  + Analytical gradients for the COSMO solvation model
  + Transition densities from TDDFT 
  + DFT+U and Electron-Transfer (ET) methods for plane wave calculations
  + Exploitation of space group symmetry in plane wave geometry optimizations
  + Local density of states (LDOS) collective variable added to Metadynamics
  + Various new XC functionals added for plane wave calculations, including
    hybrid and range-corrected ones
  + Electric field gradients with relativistic corrections 
  + Nudged Elastic Band optimization method
  + Updated basis sets and ECPs 

[ Daniel Leidert ]
* debian/watch: Fixed.

[ Andreas Tille ]
* debian/upstream: References

[ Michael Banck ]
* debian/upstream (Name): New field.
* debian/patches/02_makefile_flags.patch: Refreshed.
* debian/patches/06_statfs_kfreebsd.patch: Likewise.
* debian/patches/07_ga_target_force_linux.patch: Likewise.
* debian/patches/05_avoid_inline_assembler.patch: Removed, no longer needed.
* debian/patches/09_backported_6.1.1_fixes.patch: Likewise.
* debian/control (Build-Depends): Added gfortran-4.7 and gcc-4.7.
* debian/patches/10_force_gcc-4.7.patch: New patch, explicitly sets
  gfortran-4.7 and gcc-4.7, fixes test suite hang with gcc-4.8 (Closes:
  #701328, #713262).
* debian/testsuite: Added tests for COSMO analytical gradients and MRCC.
* debian/rules (MRCC_METHODS): New variable, required to enable MRCC methods.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
C> \ingroup nwint
 
2
C> @{
 
3
C>
 
4
C> \brief Compute the multipole integral derivatives
 
5
C>
 
6
C> Compute the multipole integral derivatives of the general form
 
7
C> \f{eqnarray*}{
 
8
C>   \frac{\partial (\mu|M_A|\nu)}{\partial R_x} &=&
 
9
C>      \int \frac{\partial [g_\mu(X_\mu,r_1)(R_A-r_1)_x^{n_x}(R_A-r_1)_y^{n_y}(R_A-r_1)_z^{n_z}g_\nu(X_\nu,r_1)]}{\partial X_x}dr_1
 
10
C> \f}
 
11
C> where the output buffer is logically organized as
 
12
C> `MP(mrange,jlo:jhi,ilo:ihi,ncoord,natom)` where 
 
13
C>
 
14
C> * `mrange` is the range of multipoles 1:((l+1)*(l+2)/2)
 
15
C>
 
16
C> * `jlo:jhi` is the range of basis functions associated with `jsh`
 
17
C>
 
18
C> * `ilo:ihi` is the range of basis functions associated with `ish`
 
19
C>
 
20
C> * `ncoord` represents the 3 Cartesian coordinates of the derivative
 
21
C>
 
22
C> * `natom` represents the 3 "atoms" involved in the integral, where
 
23
C>   1 is the center associated with `ish`, 2 is the center associate with
 
24
C>   `jsh`, and 3 is associated with the center of the multipole.
 
25
C>
 
26
C>  Integral derivatives are returned in shell blocks of <L|ish|jsh> L=lval
 
27
C>  one block for the given L value.  EACH block repeated for 9 (xyz,atoms)
 
28
C>  for ish = d and Lval = 1 and jsh = p you would get:
 
29
C>
 
30
C>  *   (6*3*3)*3*3=486 integral derivatives
 
31
C>  
 
32
C>  order would be 
 
33
C>  \code
 
34
C>       <xx|x|x> <xx|y|x> <xx|z|x> ( 1- 3)(x,atom1)
 
35
C>       <xx|x|y> <xx|y|y> <xx|z|y> ( 4- 6)(x,atom1)
 
36
C>       <xx|x|z> <xx|y|z> <xx|z|z> ( 7- 9)(x,atom1)
 
37
C>       <xy|x|x> <xy|y|x> <xy|z|x> (10-12)(x,atom1)
 
38
C>       <xy|x|y> <xy|y|y> <xy|z|y> (13-15)(x,atom1)
 
39
C>       <xy|x|z> <xy|y|z> <xy|z|z> (16-18)(x,atom1)
 
40
C>       <xz|x|x> <xz|y|x> <xz|z|x> (19-21)(x,atom1)
 
41
C>       <xz|x|y> <xz|y|y> <xz|z|y> (22-24)(x,atom1)
 
42
C>       <xz|x|z> <xz|y|z> <xz|z|z> (25-27)(x,atom1)
 
43
C>       <yy|x|x> <yy|y|x> <yy|z|x> (28-30)(x,atom1)
 
44
C>       <yy|x|y> <yy|y|y> <yy|z|y> (31-33)(x,atom1)
 
45
C>       <yy|x|z> <yy|y|z> <yy|z|z> (34-36)(x,atom1)
 
46
C>       <yz|x|x> <yz|y|x> <yz|z|x> (37-39)(x,atom1)
 
47
C>       <yz|x|y> <yz|y|y> <yz|z|y> (40-42)(x,atom1)
 
48
C>       <yz|x|z> <yz|y|z> <yz|z|z> (43-45)(x,atom1)
 
49
C>       <zz|x|x> <zz|y|x> <zz|z|x> (46-48)(x,atom1)
 
50
C>       <zz|x|y> <zz|y|y> <zz|z|y> (49-51)(x,atom1)
 
51
C>       <zz|x|z> <zz|y|z> <zz|z|z> (52-54)(x,atom1)
 
52
C>     repeat above for (y,atom1), (z,atom1)
 
53
C>   repeat above for atom2 and multipole center
 
54
C>  \endcode
 
55
C>
 
56
C>
 
57
C>
 
58
C>  For ish = p and Lval = 2 and jsh = p you would get:
 
59
C>
 
60
C>  *   (3*6*3)*3*3 = 486 integral derivatives
 
61
C>
 
62
C>  The order would be 
 
63
C>  \code
 
64
C>       <x|xx|x> <x|xy|x> <x|xz|x> <x|yy|x> <x|yz|x> <x|zz|x>  ( 1- 6)(x,atom1)
 
65
C>       <x|xx|y> <x|xy|y> <x|xz|y> <x|yy|y> <x|yz|y> <x|zz|y>  ( 7-12)(x,atom1)
 
66
C>       <x|xx|z> <x|xy|z> <x|xz|z> <x|yy|z> <x|yz|z> <x|zz|z>  (13-18)(x,atom1)
 
67
C>       <y|xx|x> <y|xy|x> <y|xz|x> <y|yy|x> <y|yz|x> <y|zz|x>  (19-24)(x,atom1)
 
68
C>       <y|xx|y> <y|xy|y> <y|xz|y> <y|yy|y> <y|yz|y> <y|zz|y>  (25-30)(x,atom1)
 
69
C>       <y|xx|z> <y|xy|z> <y|xz|z> <y|yy|z> <y|yz|z> <y|zz|z>  (31-36)(x,atom1)
 
70
C>       <z|xx|x> <z|xy|x> <z|xz|x> <z|yy|x> <z|yz|x> <z|zz|x>  (37-42)(x,atom1)
 
71
C>       <z|xx|y> <z|xy|y> <z|xz|y> <z|yy|y> <z|yz|y> <z|zz|y>  (43-48)(x,atom1)
 
72
C>       <z|xx|z> <z|xy|z> <z|xz|z> <z|yy|z> <z|yz|z> <z|zz|z>  (49-54)(x,atom1)
 
73
C>     repeat above for (y,atom1), (z,atom1)
 
74
C>   repeat above for atom2 and multipole center
 
75
C>  \endcode
 
76
C>
 
77
C>  For ish = s and lval = 4 and jsh = p you would get:
 
78
C>
 
79
C>  *  (1*15*3)*3*3 = 405 integral derivatives
 
80
C>
 
81
C>  and the order would be 
 
82
C>  \code
 
83
C>       <s|xxxx|x> <s|xxxy|x> <s|xxxz|x> <s|xxyy|x> <s|xxyz|x> <s|xxzz|x> ( 1- 6)(x,atom1)
 
84
C>       <s|xyyy|x> <s|xyyz|x> <s|xyzz|x> <s|xzzz|x> <s|yyyy|x> <s|yyyz|x> ( 7-12)(x,atom1)
 
85
C>       <s|yyzz|x> <s|yzzz|x> <s|zzzz|x>                                  (13-15)(x,atom1)
 
86
C>       <s|xxxx|y> <s|xxxy|y> <s|xxxz|y> <s|xxyy|y> <s|xxyz|y> <s|xxzz|y> (16-21)(x,atom1)
 
87
C>       <s|xyyy|y> <s|xyyz|y> <s|xyzz|y> <s|xzzz|y> <s|yyyy|y> <s|yyyz|y> (22-27)(x,atom1)
 
88
C>       <s|yyzz|y> <s|yzzz|y> <s|zzzz|y>                                  (28-30)(x,atom1)
 
89
C>       <s|xxxx|z> <s|xxxy|z> <s|xxxz|z> <s|xxyy|z> <s|xxyz|z> <s|xxzz|z> (31-36)(x,atom1)
 
90
C>       <s|xyyy|z> <s|xyyz|z> <s|xyzz|z> <s|xzzz|z> <s|yyyy|z> <s|yyyz|z> (37-42)(x,atom1)
 
91
C>       <s|yyzz|z> <s|yzzz|z> <s|zzzz|z>                                  (43-45)(x,atom1)
 
92
C>     repeat above for (y,atom1), (z,atom1)
 
93
C>   repeat above for atom2 and multipole center
 
94
C>  \endcode
 
95
C>
1
96
      subroutine intd_mpolel(i_basis, ish, j_basis, jsh, 
2
97
     &    lval, centerl,
3
98
     &    lscr, scr, lmpint, MP, num_mpint,
4
99
     &    idatom)
5
100
*
6
 
* $Id: intd_mpolel.F 19696 2010-10-29 16:53:42Z d3y133 $
 
101
* $Id: intd_mpolel.F 23317 2012-12-21 18:21:44Z d3y133 $
7
102
*
8
103
c
9
104
c routine to compute multipole integral derivatives at a given lvalue 
96
191
      external int_chk_init
97
192
      external int_nint_cart
98
193
c::passed
99
 
      integer i_basis             ! [input] basis set handle for ish
100
 
      integer ish                 ! [input] i shell/contraction
101
 
      integer j_basis             ! [input] basis set handle for jsh
102
 
      integer jsh                 ! [input] j shell/contraction
103
 
      integer lval                ! [input] maximum lvalue for 
 
194
      integer i_basis             !< [Input] basis set handle for ish
 
195
      integer ish                 !< [Input] i shell/contraction
 
196
      integer j_basis             !< [Input] basis set handle for jsh
 
197
      integer jsh                 !< [Input] j shell/contraction
 
198
      integer lval                !< [Input] maximum lvalue for 
104
199
*.......................................... multipole integrals 
105
200
*.......................................... in this batch
106
 
      double precision centerl(3) ! [input] coordinates of multipole
107
 
      integer lscr                ! [input] length of scratch array
108
 
      double precision scr(lscr)  ! [input] scratch array
109
 
      integer lmpint              ! [input] length of multipole 
 
201
      double precision centerl(3) !< [Input] coordinates of multipole
 
202
      integer lscr                !< [Input] length of scratch array
 
203
      double precision scr(lscr)  !< [Input] scratch array
 
204
      integer lmpint              !< [Input] length of multipole 
110
205
*.......................................... integrals array
111
 
      double precision MP(lmpint) ! [output] multipole integrals
112
 
      integer num_mpint           ! [output] number of multipole integrals
113
 
      integer idatom(3) ! [output] array identifying centers for derivatives
 
206
      double precision MP(lmpint) !< [Output] multipole integrals
 
207
      integer num_mpint           !< [Output] number of multipole integrals
 
208
      integer idatom(3) !< [Output] array identifying centers for derivatives
114
209
c                       ! e.g., the first nint*3  derivatives go to center idatom(1)
115
210
c                       !       the second nint*3 derivatives go to center idatom(2)
116
211
c::local      
250
345
     &      9,.false.)
251
346
      endif
252
347
      end
 
348
C> @}