dft_calc_hessian Subroutine

private subroutine dft_calc_hessian(this, fragment, result)

Calculate energy Hessian using Kohn-Sham DFT

TODO: Analytical Hessian requires: 1. Converged SCF and gradient 2. Coupled-perturbed Kohn-Sham (CPKS) equations 3. Second derivatives of integrals 4. XC kernel contributions Alternative: Use finite difference of gradients (via driver)

Type Bound

dft_method_t

Arguments

Type IntentOptional Attributes Name
class(dft_method_t), intent(in) :: this
type(physical_fragment_t), intent(in) :: fragment
type(calculation_result_t), intent(out) :: result

Calls

proc~~dft_calc_hessian~~CallsGraph proc~dft_calc_hessian dft_method_t%dft_calc_hessian proc~dft_calc_energy dft_method_t%dft_calc_energy proc~dft_calc_hessian->proc~dft_calc_energy proc~energy_total energy_t%energy_total proc~dft_calc_energy->proc~energy_total proc~mp2_total mp2_energy_t%mp2_total proc~energy_total->proc~mp2_total

Source Code

   subroutine dft_calc_hessian(this, fragment, result)
      !! Calculate energy Hessian using Kohn-Sham DFT
      !!
      !! TODO: Analytical Hessian requires:
      !! 1. Converged SCF and gradient
      !! 2. Coupled-perturbed Kohn-Sham (CPKS) equations
      !! 3. Second derivatives of integrals
      !! 4. XC kernel contributions
      !! Alternative: Use finite difference of gradients (via driver)
      class(dft_method_t), intent(in) :: this
      type(physical_fragment_t), intent(in) :: fragment
      type(calculation_result_t), intent(out) :: result

      if (this%options%verbose) then
         print *, "DFT: Analytical Hessian not yet implemented"
         print *, "DFT: Use finite difference of gradients instead"
      end if

      ! For now, just compute energy
      call this%calc_energy(fragment, result)
      result%has_hessian = .false.

   end subroutine dft_calc_hessian