compute_flux2D Subroutine

subroutine compute_flux2D(vm, flux_density, area, fraction, allsum, dstflux, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_VM), intent(in) :: vm
real(kind=ESMF_KIND_R8), pointer :: flux_density(:,:)
real(kind=ESMF_KIND_R8), pointer :: area(:,:)
real(kind=ESMF_KIND_R8), pointer :: fraction(:,:)
real(kind=ESMF_KIND_R8), intent(out) :: allsum(3)
logical, intent(in), optional :: dstflux
integer, intent(out), optional :: rc

Calls

proc~~compute_flux2d~3~~CallsGraph proc~compute_flux2d~3 compute_flux2D interface~esmf_vmallreduce ESMF_VMAllReduce proc~compute_flux2d~3->interface~esmf_vmallreduce interface~esmf_vmget ESMF_VMGet proc~compute_flux2d~3->interface~esmf_vmget proc~esmf_logfounderror ESMF_LogFoundError proc~compute_flux2d~3->proc~esmf_logfounderror proc~esmf_vmallreducei4 ESMF_VMAllReduceI4 interface~esmf_vmallreduce->proc~esmf_vmallreducei4 proc~esmf_vmallreducei4s ESMF_VMAllReduceI4S interface~esmf_vmallreduce->proc~esmf_vmallreducei4s proc~esmf_vmallreducei8 ESMF_VMAllReduceI8 interface~esmf_vmallreduce->proc~esmf_vmallreducei8 proc~esmf_vmallreducer4 ESMF_VMAllReduceR4 interface~esmf_vmallreduce->proc~esmf_vmallreducer4 proc~esmf_vmallreducer8 ESMF_VMAllReduceR8 interface~esmf_vmallreduce->proc~esmf_vmallreducer8 proc~esmf_vmgetdefault ESMF_VMGetDefault interface~esmf_vmget->proc~esmf_vmgetdefault proc~esmf_vmgetpetspecific ESMF_VMGetPetSpecific interface~esmf_vmget->proc~esmf_vmgetpetspecific esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfounderror->proc~esmf_logwrite c_esmc_loggeterrormsg c_esmc_loggeterrormsg proc~esmf_logrc2msg->c_esmc_loggeterrormsg c_esmc_vmwtime c_esmc_vmwtime proc~esmf_logwrite->c_esmc_vmwtime proc~esmf_logclose ESMF_LogClose proc~esmf_logwrite->proc~esmf_logclose proc~esmf_logflush ESMF_LogFlush proc~esmf_logwrite->proc~esmf_logflush proc~esmf_logopenfile ESMF_LogOpenFile proc~esmf_logwrite->proc~esmf_logopenfile proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_logwrite->proc~esmf_utiliounitflush proc~esmf_utilstring2array ESMF_UtilString2Array proc~esmf_logwrite->proc~esmf_utilstring2array proc~esmf_vmallreducei4->proc~esmf_logfounderror interface~c_esmc_vmallreduce c_ESMC_VMAllReduce proc~esmf_vmallreducei4->interface~c_esmc_vmallreduce proc~esmf_imerr ESMF_IMErr proc~esmf_vmallreducei4->proc~esmf_imerr proc~esmf_logseterror ESMF_LogSetError proc~esmf_vmallreducei4->proc~esmf_logseterror proc~esmf_vmgetinit ESMF_VMGetInit proc~esmf_vmallreducei4->proc~esmf_vmgetinit proc~esmf_vmallreducei4s->proc~esmf_logfounderror proc~esmf_vmallreducei4s->interface~c_esmc_vmallreduce proc~esmf_vmallreducei4s->proc~esmf_imerr proc~esmf_vmallreducei4s->proc~esmf_logseterror proc~esmf_vmallreducei4s->proc~esmf_vmgetinit proc~esmf_vmallreducei8->proc~esmf_logfounderror proc~esmf_vmallreducei8->interface~c_esmc_vmallreduce proc~esmf_vmallreducei8->proc~esmf_imerr proc~esmf_vmallreducei8->proc~esmf_logseterror proc~esmf_vmallreducei8->proc~esmf_vmgetinit proc~esmf_vmallreducer4->proc~esmf_logfounderror proc~esmf_vmallreducer4->interface~c_esmc_vmallreduce proc~esmf_vmallreducer4->proc~esmf_imerr proc~esmf_vmallreducer4->proc~esmf_logseterror proc~esmf_vmallreducer4->proc~esmf_vmgetinit proc~esmf_vmallreducer8->proc~esmf_logfounderror proc~esmf_vmallreducer8->interface~c_esmc_vmallreduce proc~esmf_vmallreducer8->proc~esmf_imerr proc~esmf_vmallreducer8->proc~esmf_logseterror proc~esmf_vmallreducer8->proc~esmf_vmgetinit proc~esmf_vmgetdefault->interface~esmf_vmget proc~esmf_vmgetdefault->proc~esmf_logfounderror c_esmc_initget_esmf_comm c_esmc_initget_esmf_comm proc~esmf_vmgetdefault->c_esmc_initget_esmf_comm c_esmc_vmget c_esmc_vmget proc~esmf_vmgetdefault->c_esmc_vmget c_esmc_vmgetmpicommnull c_esmc_vmgetmpicommnull proc~esmf_vmgetdefault->c_esmc_vmgetmpicommnull c_esmc_vmgetssilocaldevlist c_esmc_vmgetssilocaldevlist proc~esmf_vmgetdefault->c_esmc_vmgetssilocaldevlist interface~esmf_interarraycreate ESMF_InterArrayCreate proc~esmf_vmgetdefault->interface~esmf_interarraycreate proc~esmf_vmgetdefault->proc~esmf_imerr proc~esmf_interarraydestroy ESMF_InterArrayDestroy proc~esmf_vmgetdefault->proc~esmf_interarraydestroy proc~esmf_vmgetdefault->proc~esmf_logseterror proc~esmf_vmgetdefault->proc~esmf_vmgetinit proc~esmf_vmgetpetspecific->proc~esmf_logfounderror c_esmc_vmgetpetlocalinfo c_esmc_vmgetpetlocalinfo proc~esmf_vmgetpetspecific->c_esmc_vmgetpetlocalinfo proc~esmf_vmgetpetspecific->proc~esmf_imerr proc~esmf_vmgetpetspecific->proc~esmf_vmgetinit

Called by

proc~~compute_flux2d~3~~CalledByGraph proc~compute_flux2d~3 compute_flux2D proc~test_regrid2xg_online test_regrid2xg_online proc~test_regrid2xg_online->proc~compute_flux2d~3 proc~test_regrid2xgsph~2 test_regrid2xgSph proc~test_regrid2xgsph~2->proc~compute_flux2d~3

Source Code

  subroutine compute_flux2D(vm, flux_density, area, fraction, allsum, dstflux, rc)
    type(ESMF_VM), intent(in)        :: vm
    real(ESMF_KIND_R8), pointer      :: flux_density(:,:) 
    real(ESMF_KIND_R8), pointer      :: area(:,:) 
    real(ESMF_KIND_R8), pointer      :: fraction(:,:) 
    real(ESMF_KIND_R8), intent(out)  :: allsum(3)
    logical, intent(in) , optional   :: dstflux
    integer, intent(out), optional   :: rc

    real(ESMF_KIND_R8)               :: sum(3)
    integer                          :: i,j, localrc, npet, lpet
    logical                          :: l_dstflux

    if(present(rc)) rc = ESMF_SUCCESS
    l_dstflux = .false.
    if(present(dstflux)) l_dstflux = dstflux

    call ESMF_VMGet(vm, petCount=npet, localPet=lpet, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
  
    !if(lpet == 0) write(*, '(A, 4I5)') 'compute_flux2D bounds: ', &
    !  lbound(flux_density, 1), ubound(flux_density, 1), &
    !  lbound(flux_density, 2), ubound(flux_density, 2)

    sum = 0.
    do i = lbound(flux_density, 1), ubound(flux_density, 1)
      do j = lbound(flux_density, 2), ubound(flux_density, 2)
        if(l_dstflux) then
          sum(1) = sum(1) + flux_density(i,j)*area(i,j)
        else
          sum(1) = sum(1) + flux_density(i,j)*area(i,j)*fraction(i,j)
        endif
        sum(2) = sum(2) +                 area(i,j)*fraction(i,j)
        sum(3) = sum(3) +                 area(i,j)
      enddo
    enddo

    call ESMF_VMAllReduce(vm, sum, allsum, 3, ESMF_REDUCE_SUM, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return

  end subroutine compute_flux2D