HConfigNASAIterIssueTest Subroutine

subroutine HConfigNASAIterIssueTest(rc)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: rc

Calls

proc~~hconfignasaiterissuetest~~CallsGraph proc~hconfignasaiterissuetest HConfigNASAIterIssueTest esmf_hconfigcreateat esmf_hconfigcreateat proc~hconfignasaiterissuetest->esmf_hconfigcreateat esmf_hconfigisdefined esmf_hconfigisdefined proc~hconfignasaiterissuetest->esmf_hconfigisdefined esmf_hconfigiterbegin esmf_hconfigiterbegin proc~hconfignasaiterissuetest->esmf_hconfigiterbegin esmf_hconfigiterend esmf_hconfigiterend proc~hconfignasaiterissuetest->esmf_hconfigiterend interface~esmf_hconfigcreate ESMF_HConfigCreate proc~hconfignasaiterissuetest->interface~esmf_hconfigcreate proc~esmf_hconfigdestroy ESMF_HConfigDestroy proc~hconfignasaiterissuetest->proc~esmf_hconfigdestroy proc~esmf_hconfigiterloop ESMF_HConfigIterLoop proc~hconfignasaiterissuetest->proc~esmf_hconfigiterloop proc~esmf_hconfigcreatedefault ESMF_HConfigCreateDefault interface~esmf_hconfigcreate->proc~esmf_hconfigcreatedefault proc~esmf_hconfigcreatehconfig ESMF_HConfigCreateHConfig interface~esmf_hconfigcreate->proc~esmf_hconfigcreatehconfig proc~esmf_hconfigcreatei4 ESMF_HConfigCreateI4 interface~esmf_hconfigcreate->proc~esmf_hconfigcreatei4 proc~esmf_hconfigcreatei4seq ESMF_HConfigCreateI4Seq interface~esmf_hconfigcreate->proc~esmf_hconfigcreatei4seq proc~esmf_hconfigcreatei8 ESMF_HConfigCreateI8 interface~esmf_hconfigcreate->proc~esmf_hconfigcreatei8 proc~esmf_hconfigcreatei8seq ESMF_HConfigCreateI8Seq interface~esmf_hconfigcreate->proc~esmf_hconfigcreatei8seq proc~esmf_hconfigcreatelogical ESMF_HConfigCreateLogical interface~esmf_hconfigcreate->proc~esmf_hconfigcreatelogical proc~esmf_hconfigcreatelogicalseq ESMF_HConfigCreateLogicalSeq interface~esmf_hconfigcreate->proc~esmf_hconfigcreatelogicalseq proc~esmf_hconfigcreater4 ESMF_HConfigCreateR4 interface~esmf_hconfigcreate->proc~esmf_hconfigcreater4 proc~esmf_hconfigcreater4seq ESMF_HConfigCreateR4Seq interface~esmf_hconfigcreate->proc~esmf_hconfigcreater4seq proc~esmf_hconfigcreater8 ESMF_HConfigCreateR8 interface~esmf_hconfigcreate->proc~esmf_hconfigcreater8 proc~esmf_hconfigcreater8seq ESMF_HConfigCreateR8Seq interface~esmf_hconfigcreate->proc~esmf_hconfigcreater8seq proc~esmf_hconfigcreatestringseq ESMF_HConfigCreateStringSeq interface~esmf_hconfigcreate->proc~esmf_hconfigcreatestringseq c_esmc_hconfigdestroy c_esmc_hconfigdestroy proc~esmf_hconfigdestroy->c_esmc_hconfigdestroy proc~esmf_hconfiggetinit ESMF_HConfigGetInit proc~esmf_hconfigdestroy->proc~esmf_hconfiggetinit proc~esmf_imerr ESMF_IMErr proc~esmf_hconfigdestroy->proc~esmf_imerr proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_hconfigdestroy->proc~esmf_logfounderror proc~esmf_hconfigitergetinit ESMF_HConfigIterGetInit proc~esmf_hconfigiterloop->proc~esmf_hconfigitergetinit proc~esmf_hconfigiternext ESMF_HConfigIterNext proc~esmf_hconfigiterloop->proc~esmf_hconfigiternext proc~esmf_hconfigiterloop->proc~esmf_imerr proc~esmf_hconfigiterloop->proc~esmf_logfounderror

Called by

proc~~hconfignasaiterissuetest~~CalledByGraph proc~hconfignasaiterissuetest HConfigNASAIterIssueTest program~esmf_hconfigutest ESMF_HConfigUTest program~esmf_hconfigutest->proc~hconfignasaiterissuetest

Source Code

  subroutine HConfigNASAIterIssueTest(rc)
    integer, intent(out)  :: rc

    type(ESMF_HConfig) :: base_config, temp_configs
    type(ESMF_HConfigIter) :: hconfigIter,hconfigIterBegin,hconfigIterEnd
    logical :: looped

    ! Create base hconfig
    base_config = ESMF_HConfigCreate(filename='iterequalrepro.yaml',rc=rc)
    if (rc /= ESMF_SUCCESS) return

    ! Does it have collections
    if (ESMF_HConfigIsDefined(base_config,keyString='Collections')) then
       ! Get Collection
       temp_configs = ESMF_HConfigCreateAt(base_config,keyString="Collections",rc=rc)
       if (rc /= ESMF_SUCCESS) return

       ! Get iterator to collection
       hconfigIter = ESMF_HConfigIterBegin(temp_configs,rc=rc)
       if (rc /= ESMF_SUCCESS) return

       ! Get begin iterator to collection
       hconfigIterBegin = ESMF_HConfigIterBegin(temp_configs, rc=rc)
       if (rc /= ESMF_SUCCESS) return
       
       ! Get end iterator to collection
       hconfigIterEnd = ESMF_HConfigIterEnd(temp_configs,rc=rc)
       if (rc /= ESMF_SUCCESS) return
       
       ! Both begin iterators should be the same
       if (hconfigIter /= hconfigIterBegin) then
          rc=ESMF_FAILURE
          return
       endif

       ! Check if it's looping
       looped=.false.
       do while (ESMF_HConfigIterLoop(hconfigIter,hconfigIterBegin,hconfigIterEnd))
          looped=.true.
       enddo

       ! Should have looped at least once
       if (.not. looped) then
          rc=ESMF_FAILURE
          return
       endif

       ! Get rid of Collection hconfig
       call ESMF_HConfigDestroy(temp_configs, rc=rc)
       if (rc /= ESMF_SUCCESS) return
    end if

    ! Get rid of Collection hconfig
    call ESMF_HConfigDestroy(base_config, rc=rc)
    if (rc /= ESMF_SUCCESS) return
    
    ! Return success
    rc = ESMF_SUCCESS
    
  end subroutine HConfigNASAIterIssueTest