diff --git a/configure b/configure index 9bc8f24b..2a7d62e2 100755 --- a/configure +++ b/configure @@ -138,7 +138,7 @@ zeromq = Info( default_path=join(QP_ROOT_LIB, "libzmq.a")) gmp= Info( - url='https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2', + url='ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2', description=' The GNU Multiple Precision Arithmetic Library', default_path=join(QP_ROOT_LIB, "libgmp.a")) diff --git a/plugins/Full_CI_ZMQ/pt2_slave.irp.f b/plugins/Full_CI_ZMQ/pt2_slave.irp.f index 718884d1..2764b169 100644 --- a/plugins/Full_CI_ZMQ/pt2_slave.irp.f +++ b/plugins/Full_CI_ZMQ/pt2_slave.irp.f @@ -57,6 +57,8 @@ subroutine run_wf PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns PROVIDE psi_bilinear_matrix_transp_order + psi_energy(1:N_states) = energy(1:N_states) + TOUCH psi_energy !$OMP PARALLEL PRIVATE(i) i = omp_get_thread_num() diff --git a/plugins/Full_CI_ZMQ/selection_davidson_slave.irp.f b/plugins/Full_CI_ZMQ/selection_davidson_slave.irp.f index 49943ad1..2b6df181 100644 --- a/plugins/Full_CI_ZMQ/selection_davidson_slave.irp.f +++ b/plugins/Full_CI_ZMQ/selection_davidson_slave.irp.f @@ -65,6 +65,8 @@ subroutine run_wf if (zmq_get_N_det_generators (zmq_to_qp_run_socket, 1) == -1) cycle if (zmq_get_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) cycle if (zmq_get_dvector(zmq_to_qp_run_socket,1,'energy',energy,N_states) == -1) cycle + psi_energy(1:N_states) = energy(1:N_states) + TOUCH psi_energy call wall_time(t1) call write_double(6,(t1-t0),'Broadcast time') @@ -105,6 +107,8 @@ subroutine run_wf if (zmq_get_dvector(zmq_to_qp_run_socket,1,'energy',energy,N_states) == -1) cycle if (zmq_get_N_det_generators (zmq_to_qp_run_socket, 1) == -1) cycle if (zmq_get_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) cycle + psi_energy(1:N_states) = energy(1:N_states) + TOUCH psi_energy call wall_time(t1) call write_double(6,(t1-t0),'Broadcast time') diff --git a/plugins/Full_CI_ZMQ/selection_slave.irp.f b/plugins/Full_CI_ZMQ/selection_slave.irp.f index aa749151..c1712b2d 100644 --- a/plugins/Full_CI_ZMQ/selection_slave.irp.f +++ b/plugins/Full_CI_ZMQ/selection_slave.irp.f @@ -13,49 +13,60 @@ program selection_slave end subroutine provide_everything - PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context - PROVIDE pt2_e0_denominator mo_tot_num N_int fragment_count + PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context n_states_diag + PROVIDE pt2_e0_denominator mo_tot_num N_int fragment_count ci_energy mpi_master zmq_state zmq_context + PROVIDE psi_det psi_coef end subroutine run_wf use f77_zmq - + implicit none + IRP_IF MPI + include 'mpif.h' + IRP_ENDIF integer(ZMQ_PTR), external :: new_zmq_to_qp_run_socket integer(ZMQ_PTR) :: zmq_to_qp_run_socket double precision :: energy(N_states) - character*(64) :: states(4) + character*(64) :: states(2) integer :: rc, i, ierr - - integer, external :: zmq_get_dvector - integer, external :: zmq_get_psi + double precision :: t0, t1 + integer, external :: zmq_get_dvector, zmq_get_N_det_generators + integer, external :: zmq_get_psi, zmq_get_N_det_selectors + integer, external :: zmq_get_N_states_diag + call provide_everything zmq_context = f77_zmq_ctx_new () states(1) = 'selection' - states(2) = 'davidson' - states(3) = 'pt2' + states(2) = 'pt2' zmq_to_qp_run_socket = new_zmq_to_qp_run_socket() do - call wait_for_states(states,zmq_state,3) + call wait_for_states(states,zmq_state,size(states)) + print *, trim(zmq_state) - if(trim(zmq_state) == 'Stopped') then + if(zmq_state(1:7) == 'Stopped') then exit - else if (trim(zmq_state) == 'selection') then + else if (zmq_state(1:9) == 'selection') then ! Selection ! --------- - print *, 'Selection' + call wall_time(t0) if (zmq_get_psi(zmq_to_qp_run_socket,1) == -1) cycle + if (zmq_get_N_det_generators (zmq_to_qp_run_socket, 1) == -1) cycle + if (zmq_get_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) cycle if (zmq_get_dvector(zmq_to_qp_run_socket,1,'energy',energy,N_states) == -1) cycle + + call wall_time(t1) + call write_double(6,(t1-t0),'Broadcast time') !$OMP PARALLEL PRIVATE(i) i = omp_get_thread_num() @@ -63,15 +74,21 @@ subroutine run_wf !$OMP END PARALLEL print *, 'Selection done' - else if (trim(zmq_state) == 'pt2') then + else if (zmq_state(1:3) == 'pt2') then ! PT2 ! --- print *, 'PT2' + call wall_time(t0) if (zmq_get_psi(zmq_to_qp_run_socket,1) == -1) cycle if (zmq_get_dvector(zmq_to_qp_run_socket,1,'energy',energy,N_states) == -1) cycle - + if (zmq_get_N_det_generators (zmq_to_qp_run_socket, 1) == -1) cycle + if (zmq_get_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) cycle + + call wall_time(t1) + call write_double(6,(t1-t0),'Broadcast time') + logical :: lstop lstop = .False. !$OMP PARALLEL PRIVATE(i) @@ -82,7 +99,17 @@ subroutine run_wf endif + IRP_IF MPI + call MPI_BARRIER(MPI_COMM_WORLD, ierr) + if (ierr /= MPI_SUCCESS) then + print *, irp_here, 'error in barrier' + endif + IRP_ENDIF + end do + IRP_IF MPI + call MPI_finalize(i) + IRP_ENDIF end diff --git a/src/Determinants/zmq.irp.f b/src/Determinants/zmq.irp.f index 5e42cff5..e8edc1a8 100644 --- a/src/Determinants/zmq.irp.f +++ b/src/Determinants/zmq.irp.f @@ -304,7 +304,7 @@ integer function zmq_get_psi_det(zmq_to_qp_run_socket, worker_id) if (ierr /= MPI_SUCCESS) then stop 'Unable to broadcast zmq_get_psi_det' endif - call broadcast_chunks_bit_kind(psi_det,N_det*N_int*2) + call broadcast_chunks_bit_kind(psi_det,size(psi_det)) IRP_ENDIF end @@ -353,7 +353,7 @@ integer function zmq_get_psi_coef(zmq_to_qp_run_socket, worker_id) if (ierr /= MPI_SUCCESS) then stop 'Unable to broadcast zmq_get_psi_coef' endif - call broadcast_chunks_double(psi_coef,N_states*N_det) + call broadcast_chunks_double(psi_coef,size(psi_coef)) IRP_ENDIF end diff --git a/src/Integrals_Bielec/map_integrals.irp.f b/src/Integrals_Bielec/map_integrals.irp.f index 7d1714b0..85a2f954 100644 --- a/src/Integrals_Bielec/map_integrals.irp.f +++ b/src/Integrals_Bielec/map_integrals.irp.f @@ -100,7 +100,7 @@ subroutine bielec_integrals_index_reverse(i,j,k,l,i1) call bielec_integrals_index(i(ii),j(ii),k(ii),l(ii),i2) if (i1 /= i2) then print *, i1, i2 - print *, i(ii), j(jj), k(jj), l(jj) + print *, i(ii), j(ii), k(ii), l(ii) stop 'bielec_integrals_index_reverse failed' endif endif