subroutine calculate_new_shift_wrapper(iter_data, tot_parts_new, replica_pairs, t_comm_req)
type(fcimc_iter_data), intent(inout) :: iter_data
real(dp), dimension(lenof_sign), intent(in) :: tot_parts_new
real(dp), dimension(lenof_sign) :: tot_parts_new_all
logical, intent(in) :: replica_pairs
! optional argument: if false is passed, do not do the shift update and diagnostics,
! only produce output
logical, intent(in), optional :: t_comm_req
logical :: t_do_comm
! TODO: use def_default once available
if (present(t_comm_req)) then
t_do_comm = t_comm_req
else
t_do_comm = .true.
end if
! communication of trial wf properties is only done for output steps
if (t_do_comm) &
call communicate_estimates(iter_data, tot_parts_new, tot_parts_new_all, tCoupleCycleOutput)
! update the shift and rezero the cycle data
call shift_update()
call rezero_iter_stats_update_cycle(iter_data, tot_parts_new_all)
contains
subroutine shift_update()
! This is what defines the update of the shift
call collate_iter_data(iter_data)
call iter_diagnostics()
if (tRestart) return
call population_check()
call update_shift(iter_data, replica_pairs)
end subroutine shift_update
end subroutine calculate_new_shift_wrapper