ESMF_TestMinPETs Function

public function ESMF_TestMinPETs(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_testminpets~~CallsGraph proc~esmf_testminpets ESMF_TestMinPETs interface~esmf_vmget ESMF_VMGet proc~esmf_testminpets->interface~esmf_vmget proc~esmf_logwrite ESMF_LogWrite proc~esmf_testminpets->proc~esmf_logwrite proc~esmf_vmgetglobal ESMF_VMGetGlobal proc~esmf_testminpets->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

Called by

proc~~esmf_testminpets~~CalledByGraph proc~esmf_testminpets ESMF_TestMinPETs program~esmf_arraygatherutest ESMF_ArrayGatherUTest program~esmf_arraygatherutest->proc~esmf_testminpets program~esmf_fieldcommex ESMF_FieldCommEx program~esmf_fieldcommex->proc~esmf_testminpets program~esmf_fieldcreateex ESMF_FieldCreateEx program~esmf_fieldcreateex->proc~esmf_testminpets program~esmf_fieldex ESMF_FieldEx program~esmf_fieldex->proc~esmf_testminpets program~esmf_fieldgatherutest ESMF_FieldGatherUTest program~esmf_fieldgatherutest->proc~esmf_testminpets program~esmf_fieldioutest ESMF_FieldIOUTest program~esmf_fieldioutest->proc~esmf_testminpets program~esmf_fieldlssmmutest ESMF_FieldLSSMMUTest program~esmf_fieldlssmmutest->proc~esmf_testminpets program~esmf_fieldmeshsmmutest ESMF_FieldMeshSMMUTest program~esmf_fieldmeshsmmutest->proc~esmf_testminpets program~esmf_fieldredistutest ESMF_FieldRedistUTest program~esmf_fieldredistutest->proc~esmf_testminpets program~esmf_fieldrepdimex ESMF_FieldRepDimEx program~esmf_fieldrepdimex->proc~esmf_testminpets program~esmf_fieldsmmutest ESMF_FieldSMMUTest program~esmf_fieldsmmutest->proc~esmf_testminpets program~esmf_redistutest ESMF_RedistUTest program~esmf_redistutest->proc~esmf_testminpets program~esmf_statereconcileutest ESMF_StateReconcileUTest program~esmf_statereconcileutest->proc~esmf_testminpets program~fieldbundlehaloex FieldBundleHaloEx program~fieldbundlehaloex->proc~esmf_testminpets program~fieldbundleredistex FieldBundleRedistEx program~fieldbundleredistex->proc~esmf_testminpets program~fieldbundlesmmex FieldBundleSMMEx program~fieldbundlesmmex->proc~esmf_testminpets program~fieldhaloex FieldHaloEx program~fieldhaloex->proc~esmf_testminpets program~fieldredistex FieldRedistEx program~fieldredistex->proc~esmf_testminpets program~fieldsmmex FieldSMMEx program~fieldsmmex->proc~esmf_testminpets

Source Code

      function ESMF_TestMinPETs(petCount, file, line, unit)

! !RETURN VALUE:
      logical :: ESMF_TestMinPETs

! !ARGUMENTS:
      integer, intent(in) :: petCount       ! minimum 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 running on at least the minimum number of 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_TestMinPETs = .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 get number of PETS from 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 SKIP.  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 .gt. numPETs) then
        write(failMsg, *) "These tests must run on at least", 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_TestMinPETs = .true.
      return

      end function ESMF_TestMinPETs