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