Skip to content

Commit

Permalink
Correctly use todoList when setting the vmIdSingleComp inside multiComp
Browse files Browse the repository at this point in the history
case. Minor formatting changes.
  • Loading branch information
theurich committed Nov 8, 2024
1 parent e8d786f commit 3879274
Showing 1 changed file with 150 additions and 138 deletions.
288 changes: 150 additions & 138 deletions src/Superstructure/StateReconcile/src/ESMF_StateReconcile.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1085,10 +1085,19 @@ subroutine ESMF_StateReconcile_driver(state, vm, rc)
rcToReturn=rc)) return
endif
! ------------------------------------------------------------------------
#if 1
call ESMF_ReconcileSingleCompCase(state, vm=vm, vmId=vmIdSingleComp, &
attreconflag=attreconflag, siwrap=siwrap, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
#else
call ESMF_ReconcileMultiCompCase(state, vm=vm, vmIdMap=vmIdMap_ptr, &
attreconflag=attreconflag, siwrap=siwrap, ids_send=ids_send, &
vmids_send=vmids_send, vmintids_send=vmintids_send, &
nitems_buf=nitems_buf, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
#endif
! ------------------------------------------------------------------------
if (profile) then
call ESMF_TraceRegionExit("(2<) ESMF_ReconcileSingleCompCase", rc=localrc)
Expand Down Expand Up @@ -1342,7 +1351,7 @@ subroutine ESMF_ReconcileMultiCompCase(state, vm, vmIdMap, attreconflag, &
!TODO: Don't actually need these two separate loops first one will be
!TODO: enough, just directly call into the SingleCompCase from there!
do i=1, todoCount
vmIdSingleComp => vmIdMap(i)
vmIdSingleComp => vmIdMap(todoList(i))
call ESMF_ReconcileSingleCompCase(state, vm=vm, vmId=vmIdSingleComp, &
attreconflag=attreconflag, siwrap=siwrap, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
Expand Down Expand Up @@ -1809,6 +1818,11 @@ subroutine ESMF_ReconcileSingleCompCase(state, vm, vmId, attreconflag, siwrap, r
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, &
rcToReturn=rc)) return
write(msgStr,*) "SingleCompCase size(siwrap)=", size(siwrap)
call ESMF_LogWrite(msgStr, ESMF_LOGMSG_DEBUG, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, &
rcToReturn=rc)) return
end block
#endif

Expand Down Expand Up @@ -4497,154 +4511,152 @@ subroutine ESMF_ReconcileSerializeAll(state, vm, vmid, siwrap, &

! Get size of item to serialize
select case (itemType)
case (ESMF_STATEITEM_FIELDBUNDLE%ot)
call ESMF_FieldBundleGet(stateItem%datap%fbp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_FieldBundleSerialize(stateItem%datap%fbp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting FieldBundle size=',itemSize
end if
endif
case (ESMF_STATEITEM_FIELD%ot)
call ESMF_FieldGet(stateItem%datap%fp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_FieldSerialize(stateItem%datap%fp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Field size=',itemSize
end if
endif
case (ESMF_STATEITEM_ARRAY%ot)
call ESMF_ArrayGet(stateItem%datap%ap, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call c_ESMC_ArraySerialize(stateitem%datap%ap, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag, inqflag, &
localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Array size=',itemSize
end if
endif
case (ESMF_STATEITEM_ARRAYBUNDLE%ot)
call ESMF_ArrayBundleGet(stateItem%datap%abp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
case (ESMF_STATEITEM_FIELDBUNDLE%ot)
call ESMF_FieldBundleGet(stateItem%datap%fbp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_FieldBundleSerialize(stateItem%datap%fbp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting FieldBundle size=',itemSize
end if
endif
case (ESMF_STATEITEM_FIELD%ot)
call ESMF_FieldGet(stateItem%datap%fp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_FieldSerialize(stateItem%datap%fp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call c_ESMC_ArrayBundleSerialize(stateitem%datap%abp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag, inqflag, &
localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting ArrayBundle size=',itemSize
end if
endif
case (ESMF_STATEITEM_STATE%ot)
wrapper%statep => stateitem%datap%spp
ESMF_INIT_SET_CREATED(wrapper)
call ESMF_StateGet(wrapper, vm=vmItem, rc=localrc)
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Field size=',itemSize
end if
endif
case (ESMF_STATEITEM_ARRAY%ot)
call ESMF_ArrayGet(stateItem%datap%ap, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call c_ESMC_ArraySerialize(stateitem%datap%ap, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag, inqflag, &
localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Array size=',itemSize
end if
endif
case (ESMF_STATEITEM_ARRAYBUNDLE%ot)
call ESMF_ArrayBundleGet(stateItem%datap%abp, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call c_ESMC_ArrayBundleSerialize(stateitem%datap%abp, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag, inqflag, &
localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting ArrayBundle size=',itemSize
end if
endif
case (ESMF_STATEITEM_STATE%ot)
wrapper%statep => stateitem%datap%spp
ESMF_INIT_SET_CREATED(wrapper)
call ESMF_StateGet(wrapper, vm=vmItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
call ESMF_VMGetVMId(vmItem, vmId=vmIdItem, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
isFlag = ESMF_VMIdCompare(vmIdItem, vmId, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_StateSerialize(wrapper, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (isFlag) then
! object has the correct VMId -> serialize
call ESMF_StateSerialize(wrapper, &
fakeBuffer, sizeFakeBuffer, itemSize, &
attreconflag=attreconflag, inquireflag=inqflag, &
rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting State size=',itemSize
end if
endif
case (ESMF_STATEITEM_ROUTEHANDLE%ot)
! Do nothing for RouteHandles. There is no need to reconcile them.
#if 0
case (ESMF_STATEITEM_UNKNOWN%ot)
call c_ESMC_StringSerialize(stateitem%namep, &
fakeBuffer, sizeFakeBuffer, itemSize, &
inqflag, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, &
rcToReturn=rc)) return
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Unknown size=',itemSize
print *, ' PET', localPet, &
' Getting State size=',itemSize
end if
endif
case (ESMF_STATEITEM_ROUTEHANDLE%ot)
! Do nothing for RouteHandles. There is no need to reconcile them.
#if 0
case (ESMF_STATEITEM_UNKNOWN%ot)
call c_ESMC_StringSerialize(stateitem%namep, &
fakeBuffer, sizeFakeBuffer, itemSize, &
inqflag, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, &
rcToReturn=rc)) return
if (debug) then
print *, ' PET', localPet, &
' Getting Unknown size=',itemSize
end if
#endif
case default
if (ESMF_LogFoundError(ESMF_RC_INTNRL_INCONS, &
msg="Unrecognized item type.", &
ESMF_CONTEXT, &
rcToReturn=rc)) return
end select
case default
if (ESMF_LogFoundError(ESMF_RC_INTNRL_INCONS, &
msg="Unrecognized item type.", &
ESMF_CONTEXT, &
rcToReturn=rc)) return
end select

! Update buffer size by itemSize
sizeBuffer = sizeBuffer + itemSize
! Update buffer size by itemSize
sizeBuffer = sizeBuffer + itemSize
enddo

! Get rid of fakeBuffer
deallocate(fakeBuffer)



!!!!! Allocate buffer to serialize into !!!!!
allocate(buffer(sizeBuffer), stat=memstat)
if (ESMF_LogFoundAllocError(memstat, ESMF_ERR_PASSTHRU, &
Expand Down Expand Up @@ -4815,13 +4827,13 @@ subroutine ESMF_ReconcileSerializeAll(state, vm, vmid, siwrap, &
ESMF_CONTEXT, &
rcToReturn=rc)) return
#endif
case default
case default
if (ESMF_LogFoundError(ESMF_RC_INTNRL_INCONS, &
msg="Unrecognized item type.", &
ESMF_CONTEXT, &
rcToReturn=rc)) return
end select
enddo
end select
enddo

! Return success
rc = ESMF_SUCCESS
Expand Down

0 comments on commit 3879274

Please sign in to comment.