* T1
#+begin_src f90 :comments org :tangle update_t.irp.f
subroutine update_t1(nO,nV,f_o,f_v,r1,t1)

  implicit none

  BEGIN_DOC
  ! Update the T1 amplitudes for CC
  END_DOC

  ! in
  integer, intent(in)             :: nO, nV
  double precision, intent(in)    :: f_o(nO), f_v(nV), r1(nO, nV)

  ! inout
  double precision, intent(inout) :: t1(nO, nV)

  ! internal
  integer                         :: i,a

  !$OMP PARALLEL &
  !$OMP SHARED(nO,nV,t1,r1,cc_level_shift,f_o,f_v) &
  !$OMP PRIVATE(i,a) &
  !$OMP DEFAULT(NONE)
  !$OMP DO collapse(1)
  do a = 1, nV
    do i = 1, nO
      t1(i,a) = t1(i,a) - r1(i,a) / (f_o(i) - f_v(a) - cc_level_shift)
    enddo
  enddo
  !$OMP END DO
  !$OMP END PARALLEL
  
end  
#+end_src

* T2
#+begin_src f90 :comments org :tangle update_t.irp.f
subroutine update_t2(nO,nV,f_o,f_v,r2,t2)

  implicit none

  BEGIN_DOC
  ! Update the T2 amplitudes for CC
  END_DOC

  ! in
  integer, intent(in)             :: nO, nV
  double precision, intent(in)    :: f_o(nO), f_v(nV), r2(nO, nO, nV, nV)

  ! inout
  double precision, intent(inout) :: t2(nO, nO, nV, nV)

  ! internal
  integer                         :: i,j,a,b

  !$OMP PARALLEL &
  !$OMP SHARED(nO,nV,t2,r2,cc_level_shift,f_o,f_v) &
  !$OMP PRIVATE(i,j,a,b) &
  !$OMP DEFAULT(NONE)
  !$OMP DO collapse(3)
  do b = 1, nV
    do a = 1, nV
      do j = 1, nO
        do i = 1, nO
          t2(i,j,a,b) = t2(i,j,a,b) - r2(i,j,a,b) / (f_o(i) + f_o(j) - f_v(a) - f_v(b) - cc_level_shift)
        enddo
      enddo
    enddo
  enddo
  !$OMP END DO
  !$OMP END PARALLEL
  
end  
#+end_src

