52
53
integer isvals, lsvals, idum,n_dep
53
54
double precision toll_s
55
logical dft_scf,atmblk, lcdft
56
logical lsuccess, ltried_scf, ltried_cgmin, lcgmin
57
logical dft_scf,atmblk, lcdft, dft_cscf_equals_scftype
58
external dft_scf, dft_cscf_equals_scftype
61
logical dft_uks_nr_solve, dft_roks_nr_solve
62
external dft_uks_nr_solve, dft_roks_nr_solve
61
67
logical lrt_tddft ! real-time TDDFT dynamics flag
62
c logical rt_tddft_dft ! standard DFT
63
c external rt_tddft_dft
64
c logical rt_tddft_sodft ! spin-orbit DFT
65
c external rt_tddft_sodft
66
68
integer g_dipx ! ga for dipole x
67
69
integer g_dipy ! ga for dipole y
68
70
integer g_dipz ! ga for dipole z
121
c == Trash junk that may have remained in restart calcs ==
122
if(rtdb_get(rtdb,'bgj:xc_active', MT_LOG, 1,xc_active)) then
124
c Junk left from previous run, clobber it!!!
125
c Leaving it causes trouble in fock_2e because it then also
126
c calls fock_xc. The routine dft_fockbld does not expect to be
127
c using fock_xc anywhere but computes the XC-contributions by
128
c a different route. This conflict will cause the calculation
130
if(.not. rtdb_put(rtdb,'bgj:xc_active', MT_LOG, 1, .false.))
131
& call errquit(pname//"could not store xc_active",
136
c == Check which solver to use ==
137
if (.not.rtdb_get(rtdb, 'dft:cgmin', mt_log, 1, lcgmin))
109
140
c == Check real-time TDDFT flag ==
110
141
lrt_tddft = .false.
111
c if (.not. rtdb_get(rtdb, 'dft:lrt_tddft', mt_log, 1, lrt_tddft))
112
c & lrt_tddft = .false.
142
if (.not. rtdb_get(rtdb, 'dft:lrt_tddft', mt_log, 1, lrt_tddft))
143
& lrt_tddft = .false.
114
145
c == Evaluate the nuclear repulsion energy ==
115
146
LResult = geom_nuc_rep_energy(geom, Enuc)
136
167
c == Get the grid cutoff or set default ==
137
168
if(.not.rtdb_get(rtdb,'zora:cutoff',mt_dbl,1,zoracutoff))
138
169
& zoracutoff = 1.0d-08
170
if(.not.rtdb_get(rtdb,'zora:cutoff_EFG', ! FA
171
& mt_dbl,1,zoracutoff_EFG)) ! FA
172
& zoracutoff_EFG = 1.0d-08 ! FA
173
if(.not.rtdb_get(rtdb,'zora:cutoff_NMR', ! FA
174
& mt_dbl,1,zoracutoff_NMR)) ! FA
175
& zoracutoff_NMR = 1.0d-08 ! FA
176
if(.not.rtdb_get(rtdb,'zora:do_NonRel', ! FA
177
& mt_log,1,do_NonRel)) ! FA
178
& do_NonRel = .false. ! FA
179
if(.not.rtdb_get(rtdb,'zora:not_zora_scale', ! FA
180
& mt_log,1,not_zora_scale)) ! FA
181
& not_zora_scale = .false. ! FA
140
183
c == Get the light speed and other constants, if specified ==
141
184
call rel_init_con(rtdb)
530
575
c == Call the main drivers ==
531
576
if (theory .eq. 'dft') then
532
577
if (.not.lrt_tddft) then
534
dft_main0d = dft_scf(rtdb, Etold, Enuc, iVcoul_opt,
535
& iVxc_opt, iter, g_dens, g_dens_at, g_evecs, g_vxc, g_fock,
536
& g_svecs, dbl_mb(isvals), g_xcinv, g_s,
578
if ((.not.lcgmin)) then
579
dft_main0d = dft_scf(rtdb, Etold, Enuc, iVcoul_opt,
580
& iVxc_opt, iter, g_dens, g_dens_at,
581
& g_evecs, g_vxc, g_fock, g_svecs,
582
& dbl_mb(isvals), g_xcinv, g_s, lcdft,
584
else if (lcgmin) then
585
dft_main0d = dft_cg_solve(rtdb)
539
! Standard DFT + real-time dynamics
540
!dft_main0d = rt_tddft_dft(rtdb, Etold, Enuc, iVcoul_opt,
541
& ! iVxc_opt, iter, g_dens, g_dens_at, g_evecs, g_vxc, g_fock,
542
& ! g_svecs, dbl_mb(isvals), g_xcinv, g_s,
543
& ! g_dipx, g_dipy, g_dipz, g_ddotE, g_vel,
546
589
end if ! lrt_tddft
547
590
else if (theory .eq. 'sodft') then
549
592
c announce that spin-orbit calculations are being performed
550
593
if (me.eq.0) then
552
write(luout,*) "==============================="
553
write(luout,*) " Performing SODFT calculations "
554
write(luout,*) "==============================="
594
call util_print_centered(LuOut,
595
$ 'Performing spin-orbit DFT (SO-DFT) calculations', 23, .true.)
558
599
if (.not.lrt_tddft) then
560
dft_main0d = dft_scf_so(rtdb, Etold, Enuc, iVcoul_opt,
561
& iVxc_opt, iter, g_dens, g_dens_at, g_evecs, g_vxc, g_fock,
601
dft_main0d = dft_scf_so(rtdb, Etold, Enuc, iVcoul_opt,
602
& iVxc_opt, iter, g_dens, g_dens_at, g_evecs, g_vxc, g_fock,
562
603
& g_svecs, dbl_mb(isvals), g_xcinv, g_s)
564
! Spin-Orbit DFT + real-time dynamics
565
!dft_main0d = rt_tddft_sodft(rtdb, Etold, Enuc, iVcoul_opt,
566
& ! iVxc_opt, iter, g_dens, g_dens_at, g_evecs, g_vxc, g_fock,
567
& ! g_svecs, dbl_mb(isvals), g_xcinv, g_s,
568
& ! g_dipx, g_dipy, g_dipz, g_ddotE, g_vel)
569
605
dft_main0d = .false.
570
606
end if ! lrt_tddft
572
609
if (odftps) call pstat_off(ps_scfdft)
574
611
c == Clean up memory usage ==