BEGIN_PROVIDER [double precision, multi_s_deriv_1, (N_states, N_states)] &BEGIN_PROVIDER [double precision, multi_s_x_deriv_1, (N_states, N_states)] &BEGIN_PROVIDER [double precision, multi_s_y_deriv_1, (N_states, N_states)] &BEGIN_PROVIDER [double precision, multi_s_z_deriv_1, (N_states, N_states)] implicit none BEGIN_DOC ! Providers for : ! ! ! ! ||v|| = sqrt(v_x^2 + v_y^2 + v_z^2) ! v_x = d/dx ! Cf. multi_s_dipole_moment for the equations END_DOC integer :: istate,jstate ! States integer :: i,j ! general spatial MOs double precision :: nuclei_part_x, nuclei_part_y, nuclei_part_z multi_s_x_deriv_1 = 0.d0 multi_s_y_deriv_1 = 0.d0 multi_s_z_deriv_1 = 0.d0 do jstate = 1, N_states do istate = 1, N_states do i = 1, mo_num do j = 1, mo_num multi_s_x_deriv_1(istate,jstate) -= one_e_tr_dm_mo(j,i,istate,jstate) * mo_deriv_1_x(j,i) multi_s_y_deriv_1(istate,jstate) -= one_e_tr_dm_mo(j,i,istate,jstate) * mo_deriv_1_y(j,i) multi_s_z_deriv_1(istate,jstate) -= one_e_tr_dm_mo(j,i,istate,jstate) * mo_deriv_1_z(j,i) enddo enddo enddo enddo ! Nuclei part nuclei_part_x = 0.d0 nuclei_part_y = 0.d0 nuclei_part_z = 0.d0 do i = 1,nucl_num nuclei_part_x += nucl_charge(i) * nucl_coord(i,1) nuclei_part_y += nucl_charge(i) * nucl_coord(i,2) nuclei_part_z += nucl_charge(i) * nucl_coord(i,3) enddo ! Only if istate = jstate, otherwise 0 by the orthogonality of the states do istate = 1, N_states multi_s_x_deriv_1(istate,istate) += nuclei_part_x multi_s_y_deriv_1(istate,istate) += nuclei_part_y multi_s_z_deriv_1(istate,istate) += nuclei_part_z enddo ! d = do jstate = 1, N_states do istate = 1, N_states multi_s_deriv_1(istate,jstate) = & dsqrt(multi_s_x_deriv_1(istate,jstate)**2 & + multi_s_y_deriv_1(istate,jstate)**2 & + multi_s_z_deriv_1(istate,jstate)**2) enddo enddo END_PROVIDER