Commit 720df390 authored by Eirik F. Kjønstad's avatar Eirik F. Kjønstad
Browse files

Merge branch '2q_shielding_to_merge' into 'development'

New HF shielding implementation

See merge request !1533
parents 5cea7e4a 83a2278d
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@
- Orbital localization (Edmiston-Ruedenberg & Foster-Boys localization). eT-program/eT!1274, eT-program/eT!1472
- Added IPs for CC3. eT-program/eT!1260
- Added XPS for coupled cluster methods up to the CC3 level. eT-program/eT!1260
- CPHF shielding tensors are now available. eT-program/eT!1189, eT-program/eT!1281, eT-program/eT!1331, eT-program/eT!1473
- CPHF shielding tensors are now available. eT-program/eT!1189, eT-program/eT!1281, eT-program/eT!1331, eT-program/eT!1473, eT-program/eT!1533
- Added damped response (CPP) solver. Used for CCSD/CCS damped polarizabilities. eT-program/eT!1430, eT-program/eT!1459
- Added dyson orbitals for coupled cluster methods up to the CC3 level. eT-program/eT!1263
- Added molecular gradient for QED-HF. eT-program/eT!1183
+2 −2
Original line number Diff line number Diff line
@@ -588,8 +588,8 @@ endif()
#
if (OEI_LIBRARY STREQUAL "libcint" AND ERI_LIBRARY STREQUAL "libcint")
#
   add_eT_runtest(cphf_shielding_tensor                     "eT;short;shielding;hf")
   add_eT_runtest(cphf_shielding_tensor_restart             "eT;short;shielding;restart;hf")
   add_eT_runtest(hf_shielding_tensor                       "eT;short;shielding;hf")
   add_eT_runtest(restart_hf_shielding_tensor               "eT;short;shielding;restart;hf")
#
endif()
#
+10 −9
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ set(eT_fortran_sources
#
   src/engines/hf/hf_engine_class.F90
   src/engines/hf/hf_gs_engine_class.F90
   src/engines/hf/cphf_shielding_engine_class.F90
   src/engines/hf/hf_magnetic_properties_engine_class.F90
   src/engines/hf/tdhf_es_engine_class.F90
   src/engines/hf/tdhf_polarizability_engine_class.F90
#
@@ -60,8 +60,8 @@ set(eT_fortran_sources
   src/engines/hf/tasks/sad_generation_task_class.F90
   src/engines/hf/tasks/scf_task_class.F90
   src/engines/hf/tasks/hf_mean_value_task_class.F90
   src/engines/hf/tasks/hf_magnetic_properties_task_class.F90
   src/engines/hf/tasks/hf_visualization_task_class.F90
   src/engines/hf/tasks/cphf_shielding_task_class.F90
   src/engines/hf/tasks/tdhf_es_task_class.F90
   src/engines/hf/tasks/tdhf_polarizability_task_class.F90
#
@@ -296,11 +296,11 @@ set(eT_fortran_sources
   src/solver_tools/hf/hf_hessian_preconditioner_getter_class.F90
   src/solver_tools/hf/hf_redundant_rotation_projection_tool_class.F90
   src/solver_tools/hf/tamm_dancoff_transformation_class.F90
   src/solver_tools/hf/cphf_start_vector_tool_class.F90
   src/solver_tools/hf/cphf_rhs_tool_class.F90
   src/solver_tools/hf/cphf_transformation_tool_class.F90
   src/solver_tools/hf/cphf_preconditioner_getter_class.F90
   src/solver_tools/hf/cphf_linear_equation_storage_tool_class.F90
   src/solver_tools/hf/hf_magnetic_properties_start_vector_tool_class.F90
   src/solver_tools/hf/hf_magnetic_properties_rhs_tool_class.F90
   src/solver_tools/hf/hf_magnetic_properties_transformation_tool_class.F90
   src/solver_tools/hf/hf_magnetic_properties_preconditioner_getter_class.F90
   src/solver_tools/hf/hf_magnetic_properties_linear_equation_storage_tool_class.F90
   src/solver_tools/hf/tamm_dancoff_preconditioner_getter_class.F90
   src/solver_tools/hf/tamm_dancoff_eigen_storage_tool_class.F90
   src/solver_tools/hf/rpa_transformation_class.F90
@@ -318,7 +318,7 @@ set(eT_fortran_sources
   src/solver_tools/hf/hf_orbitals_updater_class.F90
   src/solver_tools/hf/scf_print_tool_class.F90
#
   src/solver_tools/factories/cphf_solver_factory_class.F90
   src/solver_tools/factories/hf_magnetic_properties_solver_factory_class.F90
   src/solver_tools/factories/tdhf_solver_factory_class.F90
   src/solver_tools/factories/hf_solver_factory_class.F90
   src/solver_tools/factories/fci_solver_factory_class.F90
@@ -480,7 +480,8 @@ set(eT_fortran_sources
   src/wavefunctions/hf/file_handling_hf.F90
   src/wavefunctions/hf/hessian_transformation_hf.F90
   src/wavefunctions/hf/tdhf_transformation_hf.F90
   src/wavefunctions/hf/cphf_transformation_hf.F90
   src/wavefunctions/hf/magnetic_properties_transformation_hf.F90
   src/wavefunctions/hf/magnetic_properties_hf.F90
#
   src/wavefunctions/cuhf/cuhf_class.F90
#
+15 −16
Original line number Diff line number Diff line


! eT - a coupled cluster program
! Copyright (C) 2016-2024 the authors of eT
!
@@ -17,34 +16,34 @@
! along with this program. If not, see <https://www.gnu.org/licenses/>.


module cphf_shielding_engine_class
module hf_magnetic_properties_engine_class

   !!
   !! CPHF shielding engine class
   !! Written by Alberto Barlini, October 2022
   !! HF magnetic properties engine class
   !! Written by Alberto Barlini, Feb 2023
   !!

   use hf_engine_class, only: hf_engine
   use hf_class,        only: hf

   use cphf_shielding_task_class, only: cphf_shielding_task
   use hf_magnetic_properties_task_class, only: hf_magnetic_properties_task

   implicit none

   type, extends(hf_engine) :: cphf_shielding_engine
   type, extends(hf_engine) :: hf_magnetic_properties_engine

      type(cphf_shielding_task), allocatable, private :: cphf
      type(hf_magnetic_properties_task), allocatable, private :: hf_magnetic_properties

   contains

      procedure, public :: ignite => ignite_hf_shielding_engine
      procedure, public :: ignite => ignite_hf_magnetic_properties_engine

   end type cphf_shielding_engine
   end type hf_magnetic_properties_engine

contains


   subroutine ignite_hf_shielding_engine(this, wf)
   subroutine ignite_hf_magnetic_properties_engine(this, wf)
      !!
      !! Written by Alberto Barlini, October 2022
      !!
@@ -52,18 +51,18 @@ contains

      implicit none

      class(cphf_shielding_engine), intent(inout) :: this
      class(hf), intent(inout) :: wf
      class(hf_magnetic_properties_engine), intent(inout) :: this

      type(hf_gs_engine), allocatable :: gs_engine

      gs_engine = hf_gs_engine()
      call gs_engine%ignite(wf)

      this%cphf = cphf_shielding_task()
      call this%cphf%execute(wf)
      this%hf_magnetic_properties = hf_magnetic_properties_task()
      call this%hf_magnetic_properties%execute(wf)

   end subroutine ignite_hf_shielding_engine
   end subroutine ignite_hf_magnetic_properties_engine


end module cphf_shielding_engine_class
end module hf_magnetic_properties_engine_class
+21 −25
Original line number Diff line number Diff line


! eT - a coupled cluster program
! Copyright (C) 2016-2024 the authors of eT
!
@@ -17,10 +15,10 @@
! along with this program. If not, see <https://www.gnu.org/licenses/>.


module cphf_shielding_task_class
module hf_magnetic_properties_task_class

   !!
   !! CPHF shielding task class
   !! HF magnetic properties task class
   !! Written by Alberto Barlini, October 2022.
   !!

@@ -29,72 +27,70 @@ module cphf_shielding_task_class

   implicit none

   type, extends(hf_task) :: cphf_shielding_task
   type, extends(hf_task) :: hf_magnetic_properties_task

   contains

      procedure, public :: execute &
                        => execute_cphf_shielding_task
                        => execute_hf_magnetic_properties_task

   end type cphf_shielding_task
   end type hf_magnetic_properties_task


   interface cphf_shielding_task
   interface hf_magnetic_properties_task

      procedure :: new_cphf_shielding_task
      procedure :: new_hf_magnetic_properties_task

   end interface cphf_shielding_task
   end interface hf_magnetic_properties_task


contains


   function new_cphf_shielding_task() result(this)
   function new_hf_magnetic_properties_task() result(this)
      !!
      !! Written by Alberto Barlini, October 2022
      !!
      implicit none

      type(cphf_shielding_task) :: this
      type(hf_magnetic_properties_task) :: this

      this%name_ = 'Calculating HF shielding tensors'
      this%name_ = 'Determining HF magnetic properties'

   end function new_cphf_shielding_task
   end function new_hf_magnetic_properties_task


   subroutine execute_cphf_shielding_task(this, wf)
   subroutine execute_hf_magnetic_properties_task(this, wf)
      !!
      !! Written by Alberto Barlini, October 2022
      !!
      use linear_davidson_solver_class,                only: linear_davidson_solver
      use cphf_solver_factory_class,    only: cphf_solver_factory
      use hf_magnetic_properties_solver_factory_class, only: hf_magnetic_properties_solver_factory

      implicit none

      class(cphf_shielding_task), intent(inout) :: this
      class(hf_magnetic_properties_task), intent(inout) :: this
      class(hf), target, intent(inout) :: wf

      class(linear_davidson_solver), allocatable :: solver
      type(cphf_solver_factory) :: solver_factory
      type(hf_magnetic_properties_solver_factory) :: solver_factory

      call this%print_header()
      call this%start_timer()

      call solver_factory%create(wf, solver)

      call wf%initialize_cphf_quantities()

      call wf%calculate_cphf_rhs()
      call wf%initialize_magnetic_properties_quantities()

      call solver%run()

      call solver%cleanup()

      call wf%cphf_summary()
      call wf%nuclear_shielding_tensors_summary()

      call this%end_timer()

   end subroutine execute_cphf_shielding_task
   end subroutine execute_hf_magnetic_properties_task


end module cphf_shielding_task_class
end module hf_magnetic_properties_task_class
Loading