ESMF_ReconcileDeserializeAll Subroutine

private subroutine ESMF_ReconcileDeserializeAll(state, vm, attreconflag, buffer, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_State), intent(inout) :: state
type(ESMF_VM), intent(in) :: vm
type(ESMF_AttReconcileFlag), intent(in) :: attreconflag
character(len=1), intent(in), pointer :: buffer(:)
integer, intent(out) :: rc

Calls

proc~~esmf_reconciledeserializeall~~CallsGraph proc~esmf_reconciledeserializeall ESMF_ReconcileDeserializeAll c_esmc_arraybundledeserialize c_esmc_arraybundledeserialize proc~esmf_reconciledeserializeall->c_esmc_arraybundledeserialize c_esmc_arraydeserialize c_esmc_arraydeserialize proc~esmf_reconciledeserializeall->c_esmc_arraydeserialize esmf_arraysetinitcreated esmf_arraysetinitcreated proc~esmf_reconciledeserializeall->esmf_arraysetinitcreated esmf_fieldbundledeserialize esmf_fieldbundledeserialize proc~esmf_reconciledeserializeall->esmf_fieldbundledeserialize esmf_stateadd esmf_stateadd proc~esmf_reconciledeserializeall->esmf_stateadd esmf_statedeserialize esmf_statedeserialize proc~esmf_reconciledeserializeall->esmf_statedeserialize proc~esmf_arraybundlesetinitcreated ESMF_ArrayBundleSetInitCreated proc~esmf_reconciledeserializeall->proc~esmf_arraybundlesetinitcreated proc~esmf_basedeserializewogarbage ESMF_BaseDeserializeWoGarbage proc~esmf_reconciledeserializeall->proc~esmf_basedeserializewogarbage proc~esmf_basedestroywogarbage ESMF_BaseDestroyWoGarbage proc~esmf_reconciledeserializeall->proc~esmf_basedestroywogarbage proc~esmf_basesetinitcreated ESMF_BaseSetInitCreated proc~esmf_reconciledeserializeall->proc~esmf_basesetinitcreated proc~esmf_fielddeserialize ESMF_FieldDeserialize proc~esmf_reconciledeserializeall->proc~esmf_fielddeserialize proc~esmf_infogetfrombase ESMF_InfoGetFromBase proc~esmf_reconciledeserializeall->proc~esmf_infogetfrombase proc~esmf_infoupdate ESMF_InfoUpdate proc~esmf_reconciledeserializeall->proc~esmf_infoupdate proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_reconciledeserializeall->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~esmf_reconciledeserializeall->proc~esmf_logseterror proc~esmf_basedeserializewogarbage->proc~esmf_logfounderror c_esmc_basedeserializewogarbage c_esmc_basedeserializewogarbage proc~esmf_basedeserializewogarbage->c_esmc_basedeserializewogarbage proc~esmf_basedestroywogarbage->proc~esmf_logfounderror c_esmc_basedestroywogarbage c_esmc_basedestroywogarbage proc~esmf_basedestroywogarbage->c_esmc_basedestroywogarbage proc~esmf_basegetinit ESMF_BaseGetInit proc~esmf_basedestroywogarbage->proc~esmf_basegetinit proc~esmf_imerr ESMF_IMErr proc~esmf_basedestroywogarbage->proc~esmf_imerr proc~esmf_fielddeserialize->c_esmc_arraydeserialize proc~esmf_fielddeserialize->esmf_arraysetinitcreated proc~esmf_fielddeserialize->proc~esmf_basesetinitcreated proc~esmf_fielddeserialize->proc~esmf_logfounderror c_esmc_fielddeserialize c_esmc_fielddeserialize proc~esmf_fielddeserialize->c_esmc_fielddeserialize c_esmc_vmaddfobject c_esmc_vmaddfobject proc~esmf_fielddeserialize->c_esmc_vmaddfobject proc~esmf_basedeserialize ESMF_BaseDeserialize proc~esmf_fielddeserialize->proc~esmf_basedeserialize proc~esmf_fieldgetserializeflag ESMF_FieldGetSerializeFlag proc~esmf_fielddeserialize->proc~esmf_fieldgetserializeflag proc~esmf_geomdeserialize ESMF_GeomDeserialize proc~esmf_fielddeserialize->proc~esmf_geomdeserialize proc~esmf_logfoundallocerror ESMF_LogFoundAllocError proc~esmf_fielddeserialize->proc~esmf_logfoundallocerror interface~c_info_base_get c_info_base_get proc~esmf_infogetfrombase->interface~c_info_base_get proc~esmf_infoupdate->proc~esmf_logfounderror interface~c_info_update c_info_update proc~esmf_infoupdate->interface~c_info_update 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 proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite

Called by

proc~~esmf_reconciledeserializeall~~CalledByGraph proc~esmf_reconciledeserializeall ESMF_ReconcileDeserializeAll proc~esmf_reconcilesinglecompcase ESMF_ReconcileSingleCompCase proc~esmf_reconcilesinglecompcase->proc~esmf_reconciledeserializeall proc~esmf_reconcilemulticompcase ESMF_ReconcileMultiCompCase proc~esmf_reconcilemulticompcase->proc~esmf_reconcilesinglecompcase proc~esmf_statereconcile_driver ESMF_StateReconcile_driver proc~esmf_statereconcile_driver->proc~esmf_reconcilemulticompcase proc~esmf_statereconcile ESMF_StateReconcile proc~esmf_statereconcile->proc~esmf_statereconcile_driver

Source Code

  subroutine ESMF_ReconcileDeserializeAll(state, vm, attreconflag, buffer, rc)
!
!TODO: This routine looks almost redundant to ESMF_StateDeserialize()!!!!!!!!!!
!
! !ARGUMENTS:
    type (ESMF_State), intent(inout)      :: state
    type (ESMF_VM),    intent(in)         :: vm
    type(ESMF_AttReconcileFlag),intent(in):: attreconflag
    character, pointer,intent(in)         :: buffer(:)
    integer,           intent(out)        :: rc
!
! !DESCRIPTION:
!
!   Builds proxy items for each of the items in the buffer.
!
!   The arguments are:
!   \begin{description}
!   \item[state]
!     {\tt ESMF\_State} to add proxy objects to.
!   \item[vm]
!     {\tt ESMF\_VM} to use.
!   \item[attreconflag]
!     Flag to indicate attribute reconciliation.
!   \item[buffer]
!     Buffer of serialized State objects (intent(in))
!   \item[rc]
!     Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
!   \end{description}
!EOPI

    integer :: localrc

    type(ESMF_FieldBundle) :: fieldbundle
    type(ESMF_Field) :: field
    type(ESMF_Array) :: array
    type(ESMF_ArrayBundle) :: arraybundle
    type(ESMF_State) :: substate

    integer :: stateitem_type
    character(ESMF_MAXSTR) :: errstring
    character(ESMF_MAXSTR) :: name

    integer :: item, numNewItems
    integer :: itemType
    integer :: sizeBuffer, posBuffer

#ifdef RECONCILE_LOG_on
    call ESMF_LogWrite("ESMF_ReconcileDeserializeAll()", &
      ESMF_LOGMSG_DEBUG, rc=localrc)
    if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
      rcToReturn=rc)) return
#endif

    ! Set start position of buffer
    posBuffer = 0

    ! Get the number of items to add
    numNewItems = transfer (  &
        source=buffer(posBuffer:posBuffer+ESMF_SIZEOF_DEFINT-1),  &
        mold  = numNewItems)
    posBuffer = posbuffer + ESMF_SIZEOF_DEFINT

    ! Loop getting new items
    do item=1, numNewItems

       ! Get item type
       itemType = transfer (  &
            source=buffer(posBuffer:posBuffer+ESMF_SIZEOF_DEFINT-1),  &
            mold  = itemType)
       posBuffer = posbuffer + ESMF_SIZEOF_DEFINT

       ! Get items
       select case (itemType)
        case (ESMF_STATEITEM_FIELDBUNDLE%ot)
#ifdef RECONCILE_LOG_on
          block
            character(160)          :: msgStr
            write(msgStr,*) "deserializing FieldBundle, pos =", posBuffer
            call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
            if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
              rcToReturn=rc)) return
          end block
#endif
          fieldbundle = ESMF_FieldBundleDeserialize(buffer, posBuffer, &
              attreconflag=attreconflag, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          call ESMF_StateAdd(state, fieldbundle, &
              addflag=.true., proxyflag=.true.,  &
              rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

        case (ESMF_STATEITEM_FIELD%ot)
#ifdef RECONCILE_LOG_on
          block
            character(160)          :: msgStr
            write(msgStr,*) "deserializing Field, pos =", posBuffer
            call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
            if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
              rcToReturn=rc)) return
          end block
#endif
          field = ESMF_FieldDeserialize(buffer, posBuffer, &
              attreconflag=attreconflag, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          call ESMF_StateAdd(state, field,      &
              addflag=.true., proxyflag=.true., &
              rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

        case (ESMF_STATEITEM_ARRAY%ot)
#ifdef RECONCILE_LOG_on
          block
            character(160)          :: msgStr
            write(msgStr,*) "deserializing Array, pos =", posBuffer
            call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
            if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
              rcToReturn=rc)) return
          end block
#endif
          call c_ESMC_ArrayDeserialize(array, buffer, posBuffer, &
              attreconflag, localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          ! Set init code
          call ESMF_ArraySetInitCreated(array, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          call ESMF_StateAdd(state, array,      &
              addflag=.true., proxyflag=.true., &
              rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

        case (ESMF_STATEITEM_ARRAYBUNDLE%ot)
#ifdef RECONCILE_LOG_on
          block
            character(160)          :: msgStr
            write(msgStr,*) "deserializing ArrayBundle, pos =", posBuffer
            call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
            if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
              rcToReturn=rc)) return
          end block
#endif
          call c_ESMC_ArrayBundleDeserialize(arraybundle, buffer, posBuffer, &
              attreconflag, localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          ! Set init code
          call ESMF_ArrayBundleSetInitCreated(arraybundle, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          call ESMF_StateAdd(state, arraybundle, &
              addflag=.true., proxyflag=.true.,  &
              rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

        case (ESMF_STATEITEM_STATE%ot)
#ifdef RECONCILE_LOG_on
          block
            character(160)          :: msgStr
            write(msgStr,*) "deserializing State, pos =", posBuffer
            call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
            if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
              rcToReturn=rc)) return
          end block
#endif
          substate = ESMF_StateDeserialize(vm,  buffer, posBuffer, &
              attreconflag=attreconflag, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

          call ESMF_StateAdd(state, substate,   &
              addflag=.true., proxyflag=.true., &
              rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
            rcToReturn=rc)) return

        case (ESMF_STATEITEM_UNKNOWN%ot)
          write (errstring, '(a,i0)') 'can''t deserialize unknown type: ', itemType
          call ESMF_LogSetError(ESMF_RC_INTNRL_INCONS, msg=errstring, &
              ESMF_CONTEXT, rcToReturn=rc)
          return

        case default
          write (errstring, '(a,i0)') 'can''t deserialize unsupported type: ', itemType
          call ESMF_LogSetError(ESMF_RC_INTNRL_INCONS, msg=errstring, &
              ESMF_CONTEXT, rcToReturn=rc)
          return

      end select

    enddo

    ! Deserialize the received State's Base itself and add to local top State
    block
      type(ESMF_Base) :: base_temp
      type(ESMF_Info) :: base_info, base_temp_info

#ifdef RECONCILE_LOG_on
       block
         character(160)          :: msgStr
         write(msgStr,*) "deserializing top State Base itself, pos =", posBuffer
         call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
         if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
           rcToReturn=rc)) return
       end block
#endif

      base_temp = ESMF_BaseDeserializeWoGarbage(buffer, &
          offset=posBuffer, attreconflag=attreconflag, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return

      call ESMF_BaseSetInitCreated(base_temp, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return

      call ESMF_InfoGetFromBase(base_temp, base_temp_info, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return

      call ESMF_InfoGetFromBase(state%statep%base, base_info, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return

      call ESMF_InfoUpdate(base_info, base_temp_info, recursive=.true., &
        rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return

      call ESMF_BaseDestroyWoGarbage(base_temp, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
        rcToReturn=rc)) return
    end block

    ! Return success
    rc = ESMF_SUCCESS

  end subroutine ESMF_ReconcileDeserializeAll