subroutine reinit_current_trial_amps() ! Recreate current trial amps, without using arrays such as trial_space ! and trial_wfs, which are deallocated after the first init_trial_wf ! call. use FciMCData, only: CurrentDets, TotWalkers, tTrialHash, current_trial_amps, ntrial_excits use searching, only: hash_search_trial, bin_search_trial use SystemData, only: nel integer(int64) :: i integer :: nI(nel) HElement_t(dp) :: trial_amps(ntrial_excits) logical :: tTrial, tCon ! Don't do anything if this is called before the trial wave function ! initialisation. if (.not. allocated(current_trial_amps)) return current_trial_amps = 0.0_dp do i = 1, TotWalkers if (tTrialHash) then call decode_bit_det(nI, CurrentDets(:, i)) call hash_search_trial(CurrentDets(:, i), nI, trial_amps, tTrial, tCon) else call bin_search_trial(CurrentDets(:, i), trial_amps, tTrial, tCon) end if ! Set the appropraite flag (if any). Unset flags which aren't ! appropriate, just in case. if (tTrial) then call set_flag(CurrentDets(:, i), flag_trial, .true.) call set_flag(CurrentDets(:, i), flag_connected, .false.) else if (tCon) then call set_flag(CurrentDets(:, i), flag_trial, .false.) call set_flag(CurrentDets(:, i), flag_connected, .true.) else call set_flag(CurrentDets(:, i), flag_trial, .false.) call set_flag(CurrentDets(:, i), flag_connected, .false.) end if ! Set the amplitude (which may be zero). current_trial_amps(:, i) = trial_amps end do end subroutine reinit_current_trial_amps