calculate_new_shift_wrapper Subroutine

public subroutine calculate_new_shift_wrapper(iter_data, tot_parts_new, replica_pairs, t_comm_req)


Type IntentOptional Attributes Name
type(fcimc_iter_data), intent(inout) :: iter_data
real(kind=dp), intent(in), dimension(lenof_sign) :: tot_parts_new
logical, intent(in) :: replica_pairs
logical, intent(in), optional :: t_comm_req


Source Code

    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
            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)


        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