* Apply MO rotation
Subroutine to apply the rotation matrix to the coefficients of the
MOs.

New MOs = Old MOs . Rotation matrix

*Compute the new MOs with the previous MOs and a rotation matrix*

Provided:
| mo_num                 | integer          | number of MOs           |
| ao_num                 | integer          | number of AOs           |
| mo_coef(ao_num,mo_num) | double precision | coefficients of the MOs |

Intent in:
| R(mo_num,mo_num) | double precision | rotation matrix |

Intent out:
| prev_mos(ao_num,mo_num) | double precision | MOs before the rotation |

Internal:
| new_mos(ao_num,mo_num) | double precision | MOs after the rotation |
| i,j                    | integer          | indexes                      |
#+BEGIN_SRC f90 :comments org :tangle apply_mo_rotation.irp.f
subroutine apply_mo_rotation(R,prev_mos)
  
  include 'pi.h'

  !BEGIN_DOC
  ! Compute the new MOs knowing the rotation matrix
  !END_DOC

  implicit none

  ! Variables

  ! in
  double precision, intent(in)  :: R(mo_num,mo_num)

  ! out 
  double precision, intent(out) :: prev_mos(ao_num,mo_num)
  
  ! internal
  double precision, allocatable :: new_mos(:,:)
  integer                       :: i,j
  double precision              :: t1,t2,t3

  print*,''
  print*,'---apply_mo_rotation---'

  call wall_time(t1)  

  ! Allocation
  allocate(new_mos(ao_num,mo_num))
  
  ! Calculation

  ! Product of old MOs (mo_coef) by Rotation matrix (R) 
  call dgemm('N','N',ao_num,mo_num,mo_num,1d0,mo_coef,size(mo_coef,1),R,size(R,1),0d0,new_mos,size(new_mos,1))

  prev_mos = mo_coef
  mo_coef = new_mos

  if (debug) then  
    print*,'New mo_coef : '
    do i = 1, mo_num
      write(*,'(100(F10.5))') mo_coef(i,:)
    enddo
  endif

  ! Save the new MOs and change the label
  mo_label = 'MCSCF'
  !call save_mos
  call ezfio_set_determinants_mo_label(mo_label)
  
  !print*,'Done, MOs saved'

  ! Deallocation, end
  deallocate(new_mos)

  call wall_time(t2)
  t3 = t2 - t1
  print*,'Time in apply mo rotation:', t3
  print*,'---End apply_mo_rotation---'

end subroutine
#+END_SRC
