BEGIN_PROVIDER [ real, ao_value_block, (ao_num_8) ] &BEGIN_PROVIDER [ real, ao_grad_block_x, (ao_num_8) ] &BEGIN_PROVIDER [ real, ao_grad_block_y, (ao_num_8) ] &BEGIN_PROVIDER [ real, ao_grad_block_z, (ao_num_8) ] &BEGIN_PROVIDER [ real, ao_lapl_block, (ao_num_8) ] &BEGIN_PROVIDER [ integer, ao_value_non_zero_idx, ((-simd_sp+1):ao_num_8) ] implicit none BEGIN_DOC ! Values of the atomic orbitals (blocked) ! Gradients of the atomic orbitals (blocked) ! Laplacian of the atomic orbitals (blocked) END_DOC if (ao_block_num == 0) then return endif integer :: j,idx,k, kmax ao_value_non_zero_idx(0) = ao_oneD_prim_non_zero_idx(0) kmax = ao_oneD_prim_non_zero_idx(0) !DIR$ VECTOR ALIGNED !DIR$ LOOP COUNT (200) do idx=1,kmax ao_value_non_zero_idx(idx) = ao_oneD_prim_non_zero_idx(idx) ao_value_block(idx) = ao_oneD_block(idx) * ao_axis_block(idx) ao_grad_block_x(idx) = ao_oneD_block(idx) * ao_axis_grad_block_x(idx) + ao_oneD_grad_block_x(idx) * ao_axis_block(idx) ao_grad_block_y(idx) = ao_oneD_block(idx) * ao_axis_grad_block_y(idx) + ao_oneD_grad_block_y(idx) * ao_axis_block(idx) ao_grad_block_z(idx) = ao_oneD_block(idx) * ao_axis_grad_block_z(idx) + ao_oneD_grad_block_z(idx) * ao_axis_block(idx) ao_lapl_block(idx) = ao_oneD_block(idx) * ao_axis_lapl_block(idx) + ao_oneD_lapl_block(idx) * ao_axis_block(idx) + & 2.*(ao_oneD_grad_block_x(idx) * ao_axis_grad_block_x(idx) + & ao_oneD_grad_block_y(idx) * ao_axis_grad_block_y(idx) + & ao_oneD_grad_block_z(idx) * ao_axis_grad_block_z(idx) ) enddo END_PROVIDER BEGIN_PROVIDER [ logical, reduce_primitives ] implicit none BEGIN_DOC ! If True, remove cusp AOs from AO basis END_DOC reduce_primitives = do_nucl_fitcusp ! if (calc_density_fit) then ! reduce_primitives = .False. ! endif END_PROVIDER BEGIN_PROVIDER [ logical, primitives_reduced ] implicit none BEGIN_DOC ! Tells if the number of primitives has been reduced due to the nucl_fitcusp END_DOC integer, save :: first_pass = 0 if (reduce_primitives.and.(first_pass == 0)) then first_pass = 1 integer :: i,j,k,l integer :: prim_num_old, prim_num prim_num_old = sum(ao_prim_num) do k=1,nucl_num point(1) = nucl_coord(k,1) point(2) = nucl_coord(k,2) point(3) = nucl_coord(k,3)+ nucl_fitcusp_radius(k) TOUCH point PROVIDE ao_oned_prim_p PROVIDE ao_prim_num_max PROVIDE ao_oned_p PROVIDE ao_power PROVIDE ao_coef PROVIDE ao_nucl PROVIDE mo_fitcusp_normalization_before do i=1,ao_num if (ao_oned_p(i) /= 0.) then l=ao_power(i,1)+ao_power(i,2)+ao_power(i,3) if ( (l == 0).and.(ao_nucl(i) == k) ) then do j=1,ao_prim_num_max if (abs(ao_coef(i,j)*ao_oneD_prim_p(i,j)/ao_oneD_p(i)) < 1.e-4) then ao_coef(i,j) = 0. endif enddo endif endif enddo enddo do i=1,ao_num j=1 do while (j