mcscf_calc_hessian Subroutine

private subroutine mcscf_calc_hessian(this, fragment, result)

Calculate energy Hessian using CASSCF

TODO: Analytical CASSCF Hessian is very complex: - Requires second derivatives of integrals - Coupled-perturbed MCSCF equations - CI second derivatives Typically done via finite difference of gradients

Type Bound

mcscf_method_t

Arguments

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

Calls

proc~~mcscf_calc_hessian~~CallsGraph proc~mcscf_calc_hessian mcscf_method_t%mcscf_calc_hessian proc~mcscf_calc_energy mcscf_method_t%mcscf_calc_energy proc~mcscf_calc_hessian->proc~mcscf_calc_energy proc~energy_total energy_t%energy_total proc~mcscf_calc_energy->proc~energy_total proc~mp2_total mp2_energy_t%mp2_total proc~energy_total->proc~mp2_total

Source Code

   subroutine mcscf_calc_hessian(this, fragment, result)
      !! Calculate energy Hessian using CASSCF
      !!
      !! TODO: Analytical CASSCF Hessian is very complex:
      !! - Requires second derivatives of integrals
      !! - Coupled-perturbed MCSCF equations
      !! - CI second derivatives
      !! Typically done via finite difference of gradients
      class(mcscf_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 *, "MCSCF: Analytical Hessian not implemented"
         print *, "MCSCF: 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 mcscf_calc_hessian