mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-10-03 14:45:59 +02:00
169 lines
6.6 KiB
Fortran
169 lines
6.6 KiB
Fortran
|
program molden_detachment_attachment
|
||
|
implicit none
|
||
|
read_wf=.True.
|
||
|
touch read_wf
|
||
|
call molden_attachment
|
||
|
end
|
||
|
|
||
|
subroutine molden_attachment
|
||
|
implicit none
|
||
|
BEGIN_DOC
|
||
|
! Produces a Molden file
|
||
|
END_DOC
|
||
|
character*(128) :: output
|
||
|
integer :: i_unit_output,getUnitAndOpen
|
||
|
integer :: i,j,k,l
|
||
|
double precision, parameter :: a0 = 0.529177249d0
|
||
|
|
||
|
PROVIDE ezfio_filename
|
||
|
|
||
|
output=trim(ezfio_filename)//'.attachement.mol'
|
||
|
print*,'output = ',trim(output)
|
||
|
|
||
|
i_unit_output = getUnitAndOpen(output,'w')
|
||
|
|
||
|
write(i_unit_output,'(A)') '[Molden Format]'
|
||
|
|
||
|
write(i_unit_output,'(A)') '[Atoms] Angs'
|
||
|
do i = 1, nucl_num
|
||
|
write(i_unit_output,'(A2,2X,I4,2X,I4,3(2X,F15.10))') &
|
||
|
trim(element_name(int(nucl_charge(i)))), &
|
||
|
i, &
|
||
|
int(nucl_charge(i)), &
|
||
|
nucl_coord(i,1)*a0, nucl_coord(i,2)*a0, nucl_coord(i,3)*a0
|
||
|
enddo
|
||
|
|
||
|
write(i_unit_output,'(A)') '[GTO]'
|
||
|
|
||
|
character*(1) :: character_shell
|
||
|
integer :: i_shell,i_prim,i_ao
|
||
|
integer :: iorder(ao_num)
|
||
|
integer :: nsort(ao_num)
|
||
|
|
||
|
i_shell = 0
|
||
|
i_prim = 0
|
||
|
do i=1,nucl_num
|
||
|
write(i_unit_output,*) i, 0
|
||
|
do j=1,nucl_num_shell_aos(i)
|
||
|
i_shell +=1
|
||
|
i_ao = nucl_list_shell_aos(i,j)
|
||
|
character_shell = trim(ao_l_char(i_ao))
|
||
|
write(i_unit_output,*) character_shell, ao_prim_num(i_ao), '1.00'
|
||
|
do k = 1, ao_prim_num(i_ao)
|
||
|
i_prim +=1
|
||
|
write(i_unit_output,'(ES20.10,2X,ES20.10)') ao_expo(i_ao,k), ao_coef(i_ao,k)
|
||
|
enddo
|
||
|
l = i_ao
|
||
|
do while ( ao_l(l) == ao_l(i_ao) )
|
||
|
nsort(l) = i*10000 + j*100
|
||
|
l += 1
|
||
|
if (l > ao_num) exit
|
||
|
enddo
|
||
|
enddo
|
||
|
write(i_unit_output,*)''
|
||
|
enddo
|
||
|
|
||
|
|
||
|
do i=1,ao_num
|
||
|
iorder(i) = i
|
||
|
! p
|
||
|
if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 1
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 2
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 3
|
||
|
! d
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 1
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 2
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 3
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 4
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 5
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 6
|
||
|
! f
|
||
|
else if ((ao_power(i,1) == 3 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 1
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 3 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 2
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 3 )) then
|
||
|
nsort(i) += 3
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 4
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 5
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 6
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 7
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 8
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 9
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 10
|
||
|
! g
|
||
|
else if ((ao_power(i,1) == 4 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 1
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 4 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 2
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 4 )) then
|
||
|
nsort(i) += 3
|
||
|
else if ((ao_power(i,1) == 3 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 4
|
||
|
else if ((ao_power(i,1) == 3 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 5
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 3 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 6
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 3 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 7
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 3 )) then
|
||
|
nsort(i) += 8
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 3 )) then
|
||
|
nsort(i) += 9
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 0 )) then
|
||
|
nsort(i) += 10
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 0 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 11
|
||
|
else if ((ao_power(i,1) == 0 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 12
|
||
|
else if ((ao_power(i,1) == 2 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 13
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 2 ).and.(ao_power(i,3) == 1 )) then
|
||
|
nsort(i) += 14
|
||
|
else if ((ao_power(i,1) == 1 ).and.(ao_power(i,2) == 1 ).and.(ao_power(i,3) == 2 )) then
|
||
|
nsort(i) += 15
|
||
|
endif
|
||
|
enddo
|
||
|
|
||
|
call isort(nsort,iorder,ao_num)
|
||
|
write(i_unit_output,'(A)') '[MO]'
|
||
|
integer :: istate
|
||
|
istate = 2
|
||
|
do i=1,n_dettachment(istate)
|
||
|
write (i_unit_output,*) 'Sym= 1'
|
||
|
write (i_unit_output,*) 'Ene=', dettachment_numbers_sorted(i,istate)
|
||
|
write (i_unit_output,*) 'Spin= Alpha'
|
||
|
write (i_unit_output,*) 'Occup=', dettachment_numbers_sorted(i,istate)
|
||
|
do j=1,ao_num
|
||
|
write(i_unit_output, '(I6,2X,ES20.10)') j, dettachment_orbitals(iorder(j),i,istate)
|
||
|
enddo
|
||
|
enddo
|
||
|
do i=1,n_attachment(istate)
|
||
|
write (i_unit_output,*) 'Sym= 1'
|
||
|
write (i_unit_output,*) 'Ene=', attachment_numbers_sorted(i,istate)
|
||
|
write (i_unit_output,*) 'Spin= Alpha'
|
||
|
write (i_unit_output,*) 'Occup=', attachment_numbers_sorted(i,istate)
|
||
|
do j=1,ao_num
|
||
|
write(i_unit_output, '(I6,2X,ES20.10)') j, attachment_orbitals(iorder(j),i,istate)
|
||
|
enddo
|
||
|
enddo
|
||
|
close(i_unit_output)
|
||
|
end
|
||
|
|