subroutine set_initial_run_references() ! Analyse each of the runs, and set the reference determinant to the ! det with the largest coefficient, rather than the currently guessed ! one... HElement_t(dp) :: largest_coeff, sgn integer(n_int) :: largest_det(0:NIfTot) ! integer :: run, j integer(int64) :: j integer :: run integer(int32) :: proc_highest integer(n_int) :: ilut(0:NIfTot) integer(int32) :: int_tmp(2) do run = 1, inum_runs if (tMultipleInitialRefs) then ! Use user specified reference states. call EncodeBitDet(initial_refs(:, run), ilut) call update_run_reference(ilut, run) else ! Find the largest det on this processor largest_coeff = h_cast(0.0_dp) do j = 1, TotWalkers sgn = extract_run_sign(CurrentDets(:, j), run) if (abs(sgn) > abs(largest_coeff)) then largest_coeff = sgn largest_det = CurrentDets(:, j) end if end do ! Find the largest det on any processor (n.b. discard the ! non-integer part. This isn't all that important). ! [W.D. 15.5.2017:] ! for the test suite problems, maybe it is important.. ! because there seems to be some compiler dependent ! differences.. call MPIAllReduceDatatype( & (/int(abs(largest_coeff), int32), int(iProcIndex, int32)/), 1, & MPI_MAXLOC, MPI_2INTEGER, int_tmp) proc_highest = int_tmp(2) call MPIBCast(largest_det, NIfTot + 1, int(proc_highest)) ! call MPIBCast(largest_det, NIfTot+1, proc_highest) write(stdout, *) 'Setting ref', run call writebitdet(stdout, largest_det, .true.) ! Set this det as the reference call update_run_reference(largest_det, run) end if end do if (tMultiRefShift) then do run = 1, inum_runs DiagSft(run) = proje_ref_energy_offsets(run) end do end if end subroutine set_initial_run_references