! $Id$
!
! Earth System Modeling Framework
! Copyright (c) 2002-2023, University Corporation for Atmospheric Research,
! Massachusetts Institute of Technology, Geophysical Fluid Dynamics
! Laboratory, University of Michigan, National Centers for Environmental
! Prediction, Los Alamos National Laboratory, Argonne National Laboratory,
! NASA Goddard Space Flight Center.
! Licensed under the University of Illinois-NCSA License.
!
!==============================================================================

#define ESMF_FILENAME "ESMF_InfoSync.F90"

!==============================================================================
! DO NOT EDIT THIS FILE DIRECTLY. IT IS GENERATED FROM A JINJA2 TEMPLATE FILE.
!   - Template files located in scripts/jinja2_templating/templates
!   - The template file is: ESMF_InfoSync.jinja2
!   - All code edits must be done in that template file then re-generated
!   - See scripts/jinja2_templating/README.md for guidance
!==============================================================================

#include "ESMF_Macros.inc"
#include "ESMF.h"

!==============================================================================
!==============================================================================

module ESMF_InfoSyncMod

use ESMF_UtilTypesMod     ! ESMF utility types
use ESMF_InitMacrosMod    ! ESMF initializer macros
use ESMF_BaseMod          ! ESMF base class
use ESMF_LogErrMod        ! ESMF error handling

use ESMF_VMMod
use ESMF_StateMod
use ESMF_StateItemMod
use ESMF_DistGridMod
use ESMF_FieldMod
use ESMF_FieldGetMod
use ESMF_FieldBundleMod
use ESMF_CompMod
use ESMF_GridCompMod
use ESMF_CplCompMod
use ESMF_SciCompMod
use ESMF_ArrayMod
use ESMF_ArrayBundleMod
use ESMF_InfoMod
use ESMF_UtilTypesMod
use ESMF_GeomMod
use ESMF_MeshMod
use ESMF_GridMod
use ESMF_XGridMod
use ESMF_XGridGetMod
use ESMF_LocStreamMod
use ESMF_RHandleMod
use ESMF_InfoDescribeMod

use iso_c_binding, only: C_INT
implicit none

!==============================================================================
!==============================================================================

private
public ESMF_InfoSync
public ESMF_InfoGetFromHost

!==============================================================================
!==============================================================================

interface ESMF_InfoSync
  module procedure ESMF_InfoSyncState
  module procedure ESMF_InfoSyncCplComp
  module procedure ESMF_InfoSyncGridComp
  module procedure ESMF_InfoSyncSciComp
  module procedure ESMF_InfoSyncField
  module procedure ESMF_InfoSyncFieldBundle
end interface

interface ESMF_InfoGetFromHost
  module procedure ESMF_InfoGetFromHostArray
  module procedure ESMF_InfoGetFromHostArrayBundle
  module procedure ESMF_InfoGetFromHostCplComp
  module procedure ESMF_InfoGetFromHostGridComp
  module procedure ESMF_InfoGetFromHostSciComp
  module procedure ESMF_InfoGetFromHostDistGrid
  module procedure ESMF_InfoGetFromHostField
  module procedure ESMF_InfoGetFromHostFieldBundle
  module procedure ESMF_InfoGetFromHostGrid
  module procedure ESMF_InfoGetFromHostState
  module procedure ESMF_InfoGetFromHostLocStream
  module procedure ESMF_InfoGetFromHostMesh
  module procedure ESMF_InfoGetFromHostGeom
end interface

contains !=====================================================================

!===============================================================================
! ESMF_InfoSync ================================================================
!===============================================================================

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncState()"
subroutine ESMF_InfoSyncState(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_State), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncState

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncCplComp()"
subroutine ESMF_InfoSyncCplComp(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_CplComp), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncCplComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncGridComp()"
subroutine ESMF_InfoSyncGridComp(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_GridComp), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncGridComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncSciComp()"
subroutine ESMF_InfoSyncSciComp(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_SciComp), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncSciComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncField()"
subroutine ESMF_InfoSyncField(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_Field), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncField

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoSyncFieldBundle()"
subroutine ESMF_InfoSyncFieldBundle(host, rootPet, vm, keywordEnforcer, markClean, rc)
  type(ESMF_FieldBundle), intent(inout) :: host
  integer, intent(in) :: rootPet
  type(ESMF_VM), intent(in) :: vm
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  logical, intent(in), optional :: markClean
  integer, intent(inout), optional :: rc

  type(ESMF_InfoDescribe) :: eidesc
  integer :: localrc
  integer(C_INT) :: local_markClean
  type(ESMF_Pointer) :: eptr

  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  local_markClean = 0  !False
  if (present(markClean)) then
    if (markClean) local_markClean = 1  !True
  endif

  call ESMF_VMGetThis(vm, eptr, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Initialize(addBaseAddress=.true., addObjectInfo=.false., rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Update(host, "", rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call c_info_base_sync(eidesc%info%ptr, rootPet, eptr%ptr, local_markClean, localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  call eidesc%Destroy(rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoSyncFieldBundle

! =============================================================================
! ESMF_InfoGetFromHost ========================================================
! =============================================================================

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostArray()"
subroutine ESMF_InfoGetFromHostArray(host, info, keywordEnforcer, rc)
  type(ESMF_Array), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostArray

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostArrayBundle()"
subroutine ESMF_InfoGetFromHostArrayBundle(host, info, keywordEnforcer, rc)
  type(ESMF_ArrayBundle), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostArrayBundle

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostCplComp()"
subroutine ESMF_InfoGetFromHostCplComp(host, info, keywordEnforcer, rc)
  type(ESMF_CplComp), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostCplComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostGridComp()"
subroutine ESMF_InfoGetFromHostGridComp(host, info, keywordEnforcer, rc)
  type(ESMF_GridComp), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostGridComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostSciComp()"
subroutine ESMF_InfoGetFromHostSciComp(host, info, keywordEnforcer, rc)
  type(ESMF_SciComp), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostSciComp

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostDistGrid()"
subroutine ESMF_InfoGetFromHostDistGrid(host, info, keywordEnforcer, rc)
  type(ESMF_DistGrid), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostDistGrid

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostField()"
subroutine ESMF_InfoGetFromHostField(host, info, keywordEnforcer, rc)
  type(ESMF_Field), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostField

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostFieldBundle()"
subroutine ESMF_InfoGetFromHostFieldBundle(host, info, keywordEnforcer, rc)
  type(ESMF_FieldBundle), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostFieldBundle

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostGrid()"
subroutine ESMF_InfoGetFromHostGrid(host, info, keywordEnforcer, rc)
  type(ESMF_Grid), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostGrid

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostState()"
subroutine ESMF_InfoGetFromHostState(host, info, keywordEnforcer, rc)
  type(ESMF_State), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostState

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostLocStream()"
subroutine ESMF_InfoGetFromHostLocStream(host, info, keywordEnforcer, rc)
  type(ESMF_LocStream), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostLocStream

! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostMesh()"
subroutine ESMF_InfoGetFromHostMesh(host, info, keywordEnforcer, rc)
  type(ESMF_Mesh), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostMesh


! Note: Documentation stub located in ESMF_InfoMod
#undef  ESMF_METHOD
#define ESMF_METHOD "ESMF_InfoGetFromHostGeom()"
subroutine ESMF_InfoGetFromHostGeom(host, info, keywordEnforcer, rc)
  type(ESMF_Geom), intent(in) :: host
  type(ESMF_Info), intent(out) :: info
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
  integer, intent(inout), optional :: rc

  integer :: localrc
  type(ESMF_InfoDescribe) :: eidesc

  if (present(rc)) rc = ESMF_RC_NOT_IMPL

  info = eidesc%GetInfo(host, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_InfoGetFromHostGeom

end module ESMF_InfoSyncMod
