1!
2!  MOLCAS conventions (counting starts from 1)
3!
4!  'c1 '  ag
5!  'ci '  ag  au
6!  'c2 '  a   b
7!  'cs '  a'  a"
8!  'd2 '  a   b2  b1  b3
9!  'c2v'  a1  b1  a2  b2
10!  'c2h'  ag  bg  au  bu
11!  'd2h'  ag  b2g b1g b3g au  b2u b1u b3u
12!
13!  MOLPRO conventions (counting starts from 1)
14!
15!  'c1 '  ag
16!  'ci '  ag  au
17!  'c2 '  a   b
18!  'cs '  a'  a"
19!  'd2 '  a   b3  b2  b1
20!  'c2v'  a1  b1  b2  a2
21!  'c2h'  ag  au  bu  bg
22!  'd2h'  ag  b3u b2u b1g b1u b2g b3g au
23!
24!  PSI4 conventions (counting starts from 0)
25!
26!  'c1 '  ag
27!  'ci '  ag  au
28!  'c2 '  a   b
29!  'cs '  a'  a"
30!  'd2 '  a   b1  b2  b3
31!  'c2v'  a1  a2  b1  b2
32!  'c2h'  ag  bg  au  bu
33!  'd2h'  ag  b1g b2g b3g au  b1u b2u b3u
34!
35
36subroutine group_psi4number( groupname, psi4number )
37
38  implicit none
39  character(3), intent(in)  :: groupname
40  integer,      intent(out) :: psi4number
41
42  psi4number = -1 ! Error output
43
44  if ( groupname .eq. 'c1 ' ) psi4number = 0
45  if ( groupname .eq. 'ci ' ) psi4number = 1
46  if ( groupname .eq. 'c2 ' ) psi4number = 2
47  if ( groupname .eq. 'cs ' ) psi4number = 3
48  if ( groupname .eq. 'd2 ' ) psi4number = 4
49  if ( groupname .eq. 'c2v' ) psi4number = 5
50  if ( groupname .eq. 'c2h' ) psi4number = 6
51  if ( groupname .eq. 'd2h' ) psi4number = 7
52
53end subroutine
54
55subroutine molpro2psi( groupname, conversion )
56
57  implicit none
58  character(3), intent(in)  :: groupname
59  integer,      intent(out) :: conversion(8)
60  integer,      parameter   :: X = -1
61
62  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
63
64  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
65  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
66  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
67  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
68  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 4, 3, 2, X, X, X, X /)
69  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 3, 4, 2, X, X, X, X /)
70  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 3, 4, 2, X, X, X, X /)
71  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 8, 7, 2, 6, 3, 4, 5 /)
72
73end subroutine
74
75subroutine psi2molpro( groupname, conversion )
76
77  implicit none
78  character(3), intent(in)  :: groupname
79  integer,      intent(out) :: conversion(8)
80  integer,      parameter   :: X = -1
81
82  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
83
84  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
85  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
86  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
87  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
88  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 4, 3, 2, X, X, X, X /)
89  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 4, 2, 3, X, X, X, X /)
90  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 4, 2, 3, X, X, X, X /)
91  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 4, 6, 7, 8, 5, 3, 2 /)
92
93end subroutine
94
95subroutine molcas2molpro( groupname, conversion )
96
97  implicit none
98  character(3), intent(in)  :: groupname
99  integer,      intent(out) :: conversion(8)
100  integer,      parameter   :: X = -1
101
102  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
103
104  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
105  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
106  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
107  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
108  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 3, 4, 2, X, X, X, X /)
109  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 2, 4, 3, X, X, X, X /)
110  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 4, 2, 3, X, X, X, X /)
111  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 6, 4, 7, 8, 3, 5, 2 /)
112
113end subroutine
114
115subroutine molpro2molcas( groupname, conversion )
116
117  implicit none
118  character(3), intent(in)  :: groupname
119  integer,      intent(out) :: conversion(8)
120  integer,      parameter   :: X = -1
121
122  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
123
124  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
125  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
126  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
127  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
128  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 4, 2, 3, X, X, X, X /)
129  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 2, 4, 3, X, X, X, X /)
130  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 3, 4, 2, X, X, X, X /)
131  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 8, 6, 3, 7, 2, 4, 5 /)
132
133end subroutine
134
135subroutine molcas2psi( groupname, conversion )
136
137  implicit none
138  character(3), intent(in)  :: groupname
139  integer,      intent(out) :: conversion(8)
140  integer,      parameter   :: X = -1
141
142  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
143
144  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
145  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
146  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
147  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
148  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 3, 2, 4, X, X, X, X /)
149  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 3, 2, 4, X, X, X, X /)
150  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 2, 3, 4, X, X, X, X /)
151  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 3, 2, 4, 5, 7, 6, 8 /)
152
153end subroutine
154
155subroutine psi2molcas( groupname, conversion )
156
157  implicit none
158  character(3), intent(in)  :: groupname
159  integer,      intent(out) :: conversion(8)
160  integer,      parameter   :: X = -1
161
162  conversion(1:8) = (/ X, X, X, X, X, X, X, X /) ! Error output
163
164  if ( groupname .eq. 'c1 ' ) conversion(1:8) = (/ 1, X, X, X, X, X, X, X /)
165  if ( groupname .eq. 'ci ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
166  if ( groupname .eq. 'c2 ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
167  if ( groupname .eq. 'cs ' ) conversion(1:8) = (/ 1, 2, X, X, X, X, X, X /)
168  if ( groupname .eq. 'd2 ' ) conversion(1:8) = (/ 1, 3, 2, 4, X, X, X, X /)
169  if ( groupname .eq. 'c2v' ) conversion(1:8) = (/ 1, 3, 2, 4, X, X, X, X /)
170  if ( groupname .eq. 'c2h' ) conversion(1:8) = (/ 1, 2, 3, 4, X, X, X, X /)
171  if ( groupname .eq. 'd2h' ) conversion(1:8) = (/ 1, 3, 2, 4, 5, 7, 6, 8 /)
172
173end subroutine
174
175program main
176
177  implicit none
178
179  integer :: conv_psi_cas(8)
180  integer :: conv_cas_psi(8)
181  integer :: conv_psi_pro(8)
182  integer :: conv_pro_psi(8)
183  integer :: conv_pro_cas(8)
184  integer :: conv_cas_pro(8)
185  integer :: group, num_irreps, irrep
186  character(3) :: groupname
187
188  do group=0,7
189
190    if ( group == 0 ) groupname = 'c1 '
191    if ( group == 1 ) groupname = 'ci '
192    if ( group == 2 ) groupname = 'c2 '
193    if ( group == 3 ) groupname = 'cs '
194    if ( group == 4 ) groupname = 'd2 '
195    if ( group == 5 ) groupname = 'c2v'
196    if ( group == 6 ) groupname = 'c2h'
197    if ( group == 7 ) groupname = 'd2h'
198
199    if ( group == 0 ) num_irreps = 1
200    if ( group == 1 ) num_irreps = 2
201    if ( group == 2 ) num_irreps = 2
202    if ( group == 3 ) num_irreps = 2
203    if ( group == 4 ) num_irreps = 4
204    if ( group == 5 ) num_irreps = 4
205    if ( group == 6 ) num_irreps = 4
206    if ( group == 7 ) num_irreps = 8
207
208    call psi2molcas(    groupname, conv_psi_cas )
209    call molcas2psi(    groupname, conv_cas_psi )
210    call psi2molpro(    groupname, conv_psi_pro )
211    call molpro2psi(    groupname, conv_pro_psi )
212    call molpro2molcas( groupname, conv_pro_cas )
213    call molcas2molpro( groupname, conv_cas_pro )
214
215    write( 6, '(A8, A3)' ) "Group = ", groupname
216    do irrep=1,num_irreps
217      write( 6, * ) conv_cas_psi( conv_psi_cas( irrep ) )
218      write( 6, * ) conv_pro_psi( conv_psi_pro( irrep ) )
219      write( 6, * ) conv_pro_cas( conv_cas_pro( irrep ) )
220      write( 6, * ) conv_cas_psi( conv_pro_cas( conv_psi_pro( irrep ) ) )
221      write( 6, * ) conv_pro_psi( conv_cas_pro( conv_psi_cas( irrep ) ) )
222      write( 6, * ) "*************************************"
223    end do
224  end do
225
226end program main
227
228
229