mirror of
https://gitlab.com/scemama/qp_plugins_scemama.git
synced 2024-08-30 07:53:39 +02:00
107 lines
2.5 KiB
Fortran
107 lines
2.5 KiB
Fortran
BEGIN_PROVIDER [ double precision, t1_guess, (spin_occ_num,spin_vir_num) ]
|
|
implicit none
|
|
BEGIN_DOC
|
|
! Guess amplitudes for single excitations
|
|
END_DOC
|
|
|
|
t1_guess(:,:) = 0d0
|
|
if (cc_guess == 1) then
|
|
integer :: iunit
|
|
integer, external :: getunitandopen
|
|
|
|
character :: check
|
|
integer :: i, a
|
|
double precision :: amplitude
|
|
|
|
iunit = getunitandopen('t1','r')
|
|
read(iunit,*)
|
|
do
|
|
read(iunit,*,err=10) i, a, amplitude
|
|
i = 2*i-1
|
|
a = 2*a-1 - spin_occ_num
|
|
t1_guess(i,a) = amplitude
|
|
enddo
|
|
10 continue
|
|
do
|
|
read(iunit,*,end=20) i, a, amplitude
|
|
i = 2*i
|
|
a = 2*a - spin_occ_num
|
|
t1_guess(i,a) = amplitude
|
|
enddo
|
|
20 continue
|
|
close(iunit)
|
|
else if (cc_guess == 2) then
|
|
call random_number(t1_guess)
|
|
t1_guess *= 1.d-3
|
|
endif
|
|
END_PROVIDER
|
|
|
|
|
|
BEGIN_PROVIDER [ double precision, t2_guess, (spin_occ_num,spin_occ_num,spin_vir_num,spin_vir_num) ]
|
|
implicit none
|
|
BEGIN_DOC
|
|
! Guess amplitudes for double excitations
|
|
END_DOC
|
|
|
|
t2_guess(:,:,:,:) = OOVV(:,:,:,:)/delta_OOVV(:,:,:,:)
|
|
|
|
if (cc_guess == 1) then
|
|
t2_guess(:,:,:,:) = 0.d0
|
|
integer :: iunit
|
|
integer, external :: getunitandopen
|
|
character :: check
|
|
integer :: i, j, a, b
|
|
double precision :: amplitude
|
|
|
|
iunit = getunitandopen('t2','r')
|
|
read(iunit,*)
|
|
do
|
|
read(iunit,*,err=10) i, j, a, b, amplitude
|
|
i = 2*i-1
|
|
j = 2*j-1
|
|
a = 2*a-1 - spin_occ_num
|
|
b = 2*b-1 - spin_occ_num
|
|
!100 format (4(I3,X), 2(F20.10,X))
|
|
!print 100, i,j,a,b,t2_guess(i,j,a,b) , amplitude
|
|
t2_guess(i,j,a,b) = amplitude
|
|
enddo
|
|
10 continue
|
|
do
|
|
read(iunit,*,err=20) i, j, a, b, amplitude
|
|
i = 2*i
|
|
j = 2*j
|
|
a = 2*a - spin_occ_num
|
|
b = 2*b - spin_occ_num
|
|
!print 100, i,j,a,b,t2_guess(i,j,a,b) , amplitude
|
|
t2_guess(i,j,a,b) = amplitude
|
|
enddo
|
|
20 continue
|
|
do
|
|
read(iunit,*,end=30) i, j, a, b, amplitude
|
|
i = 2*i-1
|
|
j = 2*j
|
|
a = 2*a-1 - spin_occ_num
|
|
b = 2*b - spin_occ_num
|
|
!print 100, i,j,a,b,t2_guess(i,j,a,b) , amplitude
|
|
t2_guess(i,j,a,b) = amplitude
|
|
!print 100, i,j,a,b,t2_guess(i,j,b,a) , -amplitude
|
|
t2_guess(i,j,b,a) = -amplitude
|
|
|
|
i = i+1
|
|
j = j-1
|
|
a = a+1
|
|
b = b-1
|
|
!print 100, i,j,a,b,t2_guess(i,j,a,b) , amplitude
|
|
t2_guess(i,j,a,b) = amplitude
|
|
!print 100, i,j,a,b,t2_guess(i,j,b,a) , -amplitude
|
|
t2_guess(i,j,b,a) = -amplitude
|
|
enddo
|
|
30 continue
|
|
close(iunit)
|
|
else if (cc_guess == 2) then
|
|
call random_number(t2_guess)
|
|
t2_guess *= 1.d-3
|
|
endif
|
|
|
|
END_PROVIDER
|