get_sum Function

private function get_sum(mg, iv)

Arguments

Type IntentOptional Attributes Name
type(mg_t), intent(in) :: mg
integer, intent(in) :: iv

Return Value real(kind=dp)


Called by

proc~~get_sum~~CalledByGraph proc~get_sum get_sum proc~subtract_mean subtract_mean proc~subtract_mean->proc~get_sum proc~mg_fas_fmg mg_fas_fmg proc~mg_fas_fmg->proc~subtract_mean proc~mg_fas_vcycle mg_fas_vcycle proc~mg_fas_fmg->proc~mg_fas_vcycle proc~mg_fas_vcycle->proc~subtract_mean proc~diffusion_solve diffusion_solve proc~diffusion_solve->proc~mg_fas_fmg proc~diffusion_solve->proc~mg_fas_vcycle proc~diffusion_solve_acoeff diffusion_solve_acoeff proc~diffusion_solve_acoeff->proc~mg_fas_fmg proc~diffusion_solve_acoeff->proc~mg_fas_vcycle proc~diffusion_solve_vcoeff diffusion_solve_vcoeff proc~diffusion_solve_vcoeff->proc~mg_fas_fmg proc~diffusion_solve_vcoeff->proc~mg_fas_vcycle

Source Code

  real(dp) function get_sum(mg, iv)
    type(mg_t), intent(in) :: mg
    integer, intent(in)    :: iv
    integer                :: lvl, i, id, nc
    real(dp)               :: w

    get_sum = 0.0_dp
    do lvl = 1, mg%highest_lvl
       nc = mg%box_size_lvl(lvl)
       w  = product(mg%dr(:, lvl)) ! Adjust for non-Cartesian cases
       do i = 1, size(mg%lvls(lvl)%my_leaves)
          id = mg%lvls(lvl)%my_leaves(i)
          get_sum = get_sum + w * sum(mg%boxes(id)%cc(1:nc, 1:nc, iv))
       end do
    end do
  end function get_sum