get_volume_coverage Subroutine

public subroutine get_volume_coverage(vol_cov)

Uses

  • proc~~get_volume_coverage~~UsesGraph proc~get_volume_coverage get_volume_coverage module~mod_global_parameters mod_global_parameters proc~get_volume_coverage->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Compute how much of the domain is covered by each grid level. This routine does not take a non-Cartesian geometry into account.

Arguments

Type IntentOptional Attributes Name
double precision, intent(out) :: vol_cov(1:refine_max_level)

Calls

proc~~get_volume_coverage~~CallsGraph proc~get_volume_coverage get_volume_coverage mpi_allreduce mpi_allreduce proc~get_volume_coverage->mpi_allreduce

Called by

proc~~get_volume_coverage~~CalledByGraph proc~get_volume_coverage get_volume_coverage proc~printlog_default printlog_default proc~printlog_default->proc~get_volume_coverage proc~saveamrfile saveamrfile proc~saveamrfile->proc~printlog_default proc~timeintegration timeintegration proc~timeintegration->proc~saveamrfile proc~main main proc~main->proc~timeintegration program~agile agile program~agile->proc~main

Source Code

  subroutine get_volume_coverage(vol_cov)
    use mod_global_parameters

    double precision, intent(out) :: vol_cov(1:refine_max_level)
    double precision              :: dsum_recv(1:refine_max_level)
    integer                       :: iigrid, igrid, iw, level

    ! First determine the total 'flat' volume in each level
    vol_cov(1:refine_max_level)=zero

    do iigrid = 1, igridstail
       igrid          = igrids(iigrid);
       level          = node(plevel_,igrid)
       vol_cov(level) = vol_cov(level)+ (rnode(rpxmax1_,igrid)-rnode(rpxmin1_,&
          igrid))*(rnode(rpxmax2_,igrid)-rnode(rpxmin2_,&
          igrid))*(rnode(rpxmax3_,igrid)-rnode(rpxmin3_,igrid))
    end do

    ! Make the information available on all tasks
    call MPI_ALLREDUCE(vol_cov, dsum_recv, refine_max_level,&
        MPI_DOUBLE_PRECISION, MPI_SUM, icomm, ierrmpi)

    ! Normalize
    vol_cov = dsum_recv / sum(dsum_recv)
  end subroutine get_volume_coverage