ESMF_TestMaxPETs Function

public function ESMF_TestMaxPETs(petCount, file, line, unit)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: petCount
character(len=*), intent(in) :: file
integer, intent(in) :: line
integer, intent(in), optional :: unit

Return Value logical


Calls

proc~~esmf_testmaxpets~~CallsGraph proc~esmf_testmaxpets ESMF_TestMaxPETs interface~esmf_vmget ESMF_VMGet proc~esmf_testmaxpets->interface~esmf_vmget proc~esmf_logwrite ESMF_LogWrite proc~esmf_testmaxpets->proc~esmf_logwrite proc~esmf_vmgetglobal ESMF_VMGetGlobal proc~esmf_testmaxpets->proc~esmf_vmgetglobal proc~esmf_vmgetdefault ESMF_VMGetDefault interface~esmf_vmget->proc~esmf_vmgetdefault proc~esmf_vmgetpetspecific ESMF_VMGetPetSpecific interface~esmf_vmget->proc~esmf_vmgetpetspecific 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_logclose->proc~esmf_logflush proc~esmf_logflush->proc~esmf_utiliounitflush proc~esmf_utilarray2string ESMF_UtilArray2String proc~esmf_logflush->proc~esmf_utilarray2string proc~esmf_logopenfile->proc~esmf_utiliounitflush proc~esmf_utiliounitget ESMF_UtilIOUnitGet proc~esmf_logopenfile->proc~esmf_utiliounitget proc~esmf_vmgetdefault->interface~esmf_vmget 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_imerr ESMF_IMErr proc~esmf_vmgetdefault->proc~esmf_imerr proc~esmf_interarraydestroy ESMF_InterArrayDestroy proc~esmf_vmgetdefault->proc~esmf_interarraydestroy proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_vmgetdefault->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~esmf_vmgetdefault->proc~esmf_logseterror proc~esmf_vmgetinit ESMF_VMGetInit proc~esmf_vmgetdefault->proc~esmf_vmgetinit c_esmc_vmgetpetlocalinfo c_esmc_vmgetpetlocalinfo proc~esmf_vmgetpetspecific->c_esmc_vmgetpetlocalinfo proc~esmf_vmgetpetspecific->proc~esmf_imerr proc~esmf_vmgetpetspecific->proc~esmf_logfounderror proc~esmf_vmgetpetspecific->proc~esmf_vmgetinit proc~esmf_interarraycreateptr ESMF_InterArrayCreatePtr interface~esmf_interarraycreate->proc~esmf_interarraycreateptr proc~esmf_interarraycreatetrg ESMF_InterArrayCreateTrg interface~esmf_interarraycreate->proc~esmf_interarraycreatetrg proc~esmf_imerr->proc~esmf_logfounderror proc~esmf_initcheckdeep ESMF_InitCheckDeep proc~esmf_imerr->proc~esmf_initcheckdeep proc~esmf_logfounddeallocerror ESMF_LogFoundDeallocError proc~esmf_interarraydestroy->proc~esmf_logfounddeallocerror proc~esmf_logfounderror->proc~esmf_logwrite esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg

Source Code

      function ESMF_TestMaxPETs(petCount, file, line, unit)

! !RETURN VALUE:
      logical :: ESMF_TestMaxPETs

! !ARGUMENTS:
      integer, intent(in) :: petCount       ! maximum number of acceptable PETs
      character(*), intent(in) :: file      ! test file name
      integer, intent(in) :: line           ! test file line number
      integer, intent(in), optional :: unit ! additional output unit number

! !DESCRIPTION:
!     Verifies we are not running on too many PETs.
!     If {\tt unit} is specified, will in addition write the same message 
!     to that Fortran unit number.
!
!EOP
!-------------------------------------------------------------------------------

      character(ESMF_MAXSTR) :: msg, failMsg
      type(ESMF_VM) :: globalVM
      integer :: numPETs, localrc
      character(16) :: linestr

      write (linestr,*) line
      linestr = adjustl (linestr)

      ! assume failure until sure of success
      ESMF_TestMaxPETs = .false.

      ! Get the global VM and pet count.
      call ESMF_VMGetGlobal(globalVM, rc=localrc)
      if (localrc .ne. ESMF_SUCCESS) then
        failMsg = "Unable to get global VM" 
        write(msg, *) "FAIL ", trim(file), ", line ", trim (linestr), ": ", trim(failMsg)
        print *, trim(msg)
        call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_INFO)
        if (present(unit)) write(unit, *) trim(msg)
        return
      end if

      call ESMF_VMGet(globalVM, petCount=numPETs, rc=localrc)
      if (localrc .ne. ESMF_SUCCESS) then
        failMsg = "Unable to query global VM" 
        write(msg, *) "FAIL ", trim(file), ", line ", &
                      trim (linestr), ": ", trim(failMsg)
        print *, trim(msg)
        call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_INFO)
        if (present(unit)) write(unit, *) trim(msg)
        return
      endif

      ! Return neither a PASS or FAIL message, but SKIPPED.  The nightly
      ! build scripts are smarter about not looking for output from a
      ! file which only contains multiproc tags if it is being run uni,
      ! but this is more for the user to see.
      if (petCount .lt. numPETs) then
        write(failMsg, *) "These tests must run not more than", petCount, " processors."
        write(msg, *) "SKIP ", trim(file), ", line ", &
                      trim (linestr), ": ", trim(failMsg)
        print *, trim(msg)
        call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_INFO)
        if (present(unit)) write(unit, *) trim(msg)
        return
      endif

      ESMF_TestMaxPETs = .true.
      return

      end function ESMF_TestMaxPETs