From d3c74ae300b04f2853311ea2120bd5f1387b0d63 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 2 Oct 2018 23:03:44 +0200 Subject: [PATCH 1/2] Removed extra diagonalization --- plugins/Full_CI_ZMQ/fci_zmq.irp.f | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/Full_CI_ZMQ/fci_zmq.irp.f b/plugins/Full_CI_ZMQ/fci_zmq.irp.f index 91adeea0..03989552 100644 --- a/plugins/Full_CI_ZMQ/fci_zmq.irp.f +++ b/plugins/Full_CI_ZMQ/fci_zmq.irp.f @@ -21,8 +21,10 @@ program fci_zmq threshold_davidson = threshold_davidson_in * 100.d0 SOFT_TOUCH threshold_davidson - call diagonalize_CI - call save_wavefunction + if (N_det < N_states) then + call diagonalize_CI + call save_wavefunction + endif call ezfio_has_hartree_fock_energy(has) if (has) then From c688c057a8b7f75bdbdcdcf42b13388025f82f89 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 3 Oct 2018 22:44:26 +0200 Subject: [PATCH 2/2] Better scaling of Davidson --- plugins/dress_zmq/dress_stoch_routines.irp.f | 7 +------ src/Davidson/davidson_parallel.irp.f | 9 ++++++--- src/Davidson/u0Hu0.irp.f | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/dress_zmq/dress_stoch_routines.irp.f b/plugins/dress_zmq/dress_stoch_routines.irp.f index e44a108e..2904d3d4 100644 --- a/plugins/dress_zmq/dress_stoch_routines.irp.f +++ b/plugins/dress_zmq/dress_stoch_routines.irp.f @@ -17,14 +17,9 @@ END_PROVIDER e = elec_num - n_core_orb * 2 pt2_n_tasks_max = 1 + min((e*(e-1))/2, int(dsqrt(dble(N_det_generators)))/10) do i=1,N_det_generators - if (maxval(dabs(psi_coef_sorted_gen(i,1:N_states))) > 0.01d0) then - pt2_F(i) = pt2_n_tasks_max - else - pt2_F(i) = 1 - endif + pt2_F(i) = 1 + dble(pt2_n_tasks_max)*maxval(dsqrt(dabs(psi_coef_sorted_gen(i,1:N_states)))) enddo - if(N_det_generators < 128) then pt2_minDetInFirstTeeth = 1 pt2_N_teeth = 1 diff --git a/src/Davidson/davidson_parallel.irp.f b/src/Davidson/davidson_parallel.irp.f index aec9dbaf..8d580083 100644 --- a/src/Davidson/davidson_parallel.irp.f +++ b/src/Davidson/davidson_parallel.irp.f @@ -129,8 +129,11 @@ subroutine davidson_slave_work(zmq_to_qp_run_socket, zmq_socket_push, N_st, sze, endif if(task_id == 0) exit read (msg,*) imin, imax, ishift, istep - v_t = 0.d0 - s_t = 0.d0 + integer :: k + do k=imin,imax + v_t(:,k) = 0.d0 + s_t(:,k) = 0.d0 + enddo call H_S2_u_0_nstates_openmp_work(v_t,s_t,u_t,N_st,N_det,imin,imax,ishift,istep) if (task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id) == -1) then print *, irp_here, 'Unable to send task_done' @@ -362,7 +365,7 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze) ishift=0 imin=1 N_det_inv = 1.d0/dble(N_det) - max_workload = 50000.d0 + max_workload = 10000.d0 do imax=1,N_det w = w + 1.d0 if (w > max_workload) then diff --git a/src/Davidson/u0Hu0.irp.f b/src/Davidson/u0Hu0.irp.f index 38e3f293..a816a56b 100644 --- a/src/Davidson/u0Hu0.irp.f +++ b/src/Davidson/u0Hu0.irp.f @@ -175,7 +175,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend, ASSERT (istart > 0) ASSERT (istep > 0) - !$OMP DO SCHEDULE(dynamic,64) + !$OMP DO SCHEDULE(guided,64) do k_a=istart+ishift,iend,istep krow = psi_bilinear_matrix_rows(k_a) @@ -246,7 +246,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend, enddo !$OMP END DO - !$OMP DO SCHEDULE(dynamic,64) + !$OMP DO SCHEDULE(guided,64) do k_a=istart+ishift,iend,istep