1      Subroutine defNxyz(lambda)
2c $Id$
3      implicit none
4
5      integer lambda
6
7#include "sh_order.fh"
8
9      integer l0, l1, l2, lr, nc
10      external bdIxyz
11c
12c Initialize the "Ixyz" data structure up through 4 times the given angular
13c momentum. This is necessary to calculate a 4-center ERI comprising four
14c shells of this maximum angular momentum.
15c
16c The order of components in shells of increasing angular momentum is defined
17c as follows:
18c
19c     Data s/ 0,0,0 /
20c
21c     Data p/ 1,0,0,
22c    &        0,1,0,
23c    &        0,0,1 /
24c
25c     Data d/ 2,0,0,
26c    &        1,1,0,
27c    &        1,0,1,
28c    &        0,2,0,
29c    &        0,1,1,
30c    &        0,0,2 /
31c
32c     Data f/ 3,0,0,
33c    &        2,1,0,
34c    &        2,0,1,
35c    &        1,2,0,
36c    &        1,1,1,
37c    &        1,0,2,
38c    &        0,3,0,
39c    &        0,2,1,
40c    &        0,1,2,
41c    &        0,0,3 /
42c
43c     etc.
44c
45c******************************************************************************
46
47c Multiply by a factor of 4 to intialize for 4-ctr ERIs.
48
49      if (lambda.eq.0) then
50        lR = 4    ! minimum specification for s (s functions multi-pole=4)
51      else
52        lR = 4*lambda
53      endif
54
55c Determine whether initialization up through the specified angular momentum
56c has already occurred.
57
58      if( lR.le.linit ) return
59
60      if( lR.gt.lRmax )then
61       write(*,*)
62       write(*,*) 'DEFNXYZ:  ''lRmax'' must be increased to define the'
63       write(*,*) '          shell component ordering of higher angular'
64       write(*,*) '          momentum basis functions.'
65       write(*,*)
66       write(*,*) '          For integral evaluation only:'
67       write(*,*)
68       write(*,*) '          lRmax = 4*(highest ang. mom. in basis) '
69       write(*,*)
70       stop
71      end if
72
73      nc = 0
74
75      do 20 l0 = 0,lR
76
77       do 10 l1 = l0,0,-1
78       do 10 l2 = l0-l1,0,-1
79
80        nc = nc + 1
81
82        Ixyz(1,nc) = l1
83        Ixyz(2,nc) = l2
84        Ixyz(3,nc) = l0 - (l1 + l2)
85
86   10  continue
87
88   20 continue
89
90      linit = lR
91
92      end
93
94c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95
96      Block data bdIxyz
97      implicit none
98
99#include "sh_order.fh"
100
101      Data Ixyz, linit / lRmax3*0, lRmax3*0, lRmax3*0, -375 /
102
103      end
104