2
C zfock_os_core_scalarzora.F
4
C Calculates 1 electron scalar ZORA part (Hcore) of a openn shell
5
C complex Fock matrix. Note that input is the real part of the
6
C density matrix, and output is real part of the Fock matrix.
8
subroutine zfock_os_core_scalarzora (params, g_densre, g_fcore)
14
#include "mafdecls.fh"
19
#include "rt_tddft.fh"
23
type(rt_params_t), intent(in) :: params
24
integer, intent(in) :: g_densre(2)
28
integer, intent(in) :: g_fcore(2)
32
character(*), parameter :: pname = "zfock_os_core_scalarzora: "
36
double precision elapsed
37
integer g_sf(2) ! ZORA scalar arrays; real nbf_ao x nbf_ao
38
integer g_scale_sf(2) ! ZORA scalar energy scaling arrays; real nbf_ao x nbf_ao
43
logical, external :: dft_zora_read
47
$ call errquit (pname//"called without ZORA active",0,0)
49
call rt_tddft_os_confirm (params)
51
if (params%prof) call prof_start (elapsed)
56
if (.not. ga_create(mt_dbl, params%nbf_ao, params%nbf_ao,
57
$ "sf(1)", 0, 0, g_sf(1)))
58
$ call errquit (pname//"couldnt make g_sf(1)", 0, GA_ERR)
59
if (.not. ga_create(mt_dbl, params%nbf_ao, params%nbf_ao,
60
$ "sf(2)", 0, 0, g_sf(2)))
61
$ call errquit (pname//"couldnt make g_sf(2)", 0, GA_ERR)
63
if (.not. ga_create(mt_dbl, params%nbf_ao, params%nbf_ao,
64
$ "scale sf(1)", 0, 0, g_scale_sf(1)))
65
$ call errquit (pname//"couldnt make g_sf(1)", 0, GA_ERR)
66
if (.not. ga_create(mt_dbl, params%nbf_ao, params%nbf_ao,
67
$ "scale sf(2)", 0, 0, g_scale_sf(2)))
68
$ call errquit (pname//"couldnt make g_sf(2)", 0, GA_ERR)
72
C Get ZORA data from file. If we can't read it, quit--rebuilding it
73
C on the fly is far too slow. We only use g_so and g_sf, as the
74
C scaling arrays are only applied to the eigenvalues in the SCF.
76
C Note: this grabs the spin-orbit parts too, but we dont add them of
77
C course. This is done separately in the spin-orbit code.
79
call util_file_name ("zora_sf", .false., .false., fname)
81
call ga_zero (g_sf(1))
82
call ga_zero (g_sf(2))
83
call ga_zero (g_scale_sf(1))
84
call ga_zero (g_scale_sf(2))
87
$ write (luout, *) pname//"todo: read in once only"
91
if (.not.dft_zora_read(fname, params%nbf_ao, 2,
92
$ params%nbf_ao, mult, g_sf, g_scale_sf))
93
$ call errquit (pname//
94
$ "failed to read scalar ZORA data from: "//trim(fname), 0, 0)
96
call ga_zero (g_fcore(1))
97
call ga_zero (g_fcore(2))
98
call ga_add (1d0, g_fcore(1), 1d0, g_sf(1), g_fcore(1))
99
call ga_add (1d0, g_fcore(2), 1d0, g_sf(2), g_fcore(2))
101
if (.not. ga_destroy (g_sf(1)))
102
$ call errquit (pname//"failed to destroy g_sf(1)", 0, 0)
103
if (.not. ga_destroy (g_sf(2)))
104
$ call errquit (pname//"failed to destroy g_sf(1)", 0, 0)
106
if (.not. ga_destroy (g_scale_sf(1)))
107
$ call errquit (pname//"failed to destroy g_scale_sf(1)", 0, 0)
108
if (.not. ga_destroy (g_scale_sf(2)))
109
$ call errquit (pname//"failed to destroy g_scale_sf(1)", 0, 0)
112
$ call prof_end (elapsed, "Fock CS core scalar ZORA")