f_esmf_localarraycopyf90ptr Subroutine

subroutine f_esmf_localarraycopyf90ptr(arrayInPtr, arrayOutPtr, datacopyflag, rc)

Uses

  • proc~~f_esmf_localarraycopyf90ptr~~UsesGraph proc~f_esmf_localarraycopyf90ptr f_esmf_localarraycopyf90ptr module~esmf_basemod ESMF_BaseMod proc~f_esmf_localarraycopyf90ptr->module~esmf_basemod module~esmf_localarraymod ESMF_LocalArrayMod proc~f_esmf_localarraycopyf90ptr->module~esmf_localarraymod module~esmf_logerrmod ESMF_LogErrMod proc~f_esmf_localarraycopyf90ptr->module~esmf_logerrmod module~esmf_utiltypesmod ESMF_UtilTypesMod proc~f_esmf_localarraycopyf90ptr->module~esmf_utiltypesmod module~esmf_basemod->module~esmf_logerrmod module~esmf_basemod->module~esmf_utiltypesmod iso_c_binding iso_c_binding module~esmf_basemod->iso_c_binding module~esmf_initmacrosmod ESMF_InitMacrosMod module~esmf_basemod->module~esmf_initmacrosmod module~esmf_ioutilmod ESMF_IOUtilMod module~esmf_basemod->module~esmf_ioutilmod module~esmf_vmmod ESMF_VMMod module~esmf_basemod->module~esmf_vmmod ESMF_LocalArrayCreateMod ESMF_LocalArrayCreateMod module~esmf_localarraymod->ESMF_LocalArrayCreateMod ESMF_LocalArrayGetMod ESMF_LocalArrayGetMod module~esmf_localarraymod->ESMF_LocalArrayGetMod module~esmf_logerrmod->module~esmf_utiltypesmod module~esmf_logerrmod->module~esmf_ioutilmod module~esmf_utilstringmod ESMF_UtilStringMod module~esmf_logerrmod->module~esmf_utilstringmod module~esmf_utiltypesmod->iso_c_binding module~esmf_initmacrosmod->module~esmf_logerrmod module~esmf_initmacrosmod->module~esmf_utiltypesmod module~esmf_ioutilmod->module~esmf_utiltypesmod module~esmf_vmmod->module~esmf_logerrmod module~esmf_vmmod->module~esmf_utiltypesmod module~esmf_vmmod->iso_c_binding module~esmf_vmmod->module~esmf_initmacrosmod module~esmf_vmmod->module~esmf_ioutilmod module~esmf_f90interfacemod ESMF_F90InterfaceMod module~esmf_vmmod->module~esmf_f90interfacemod module~esmf_f90interfacemod->module~esmf_logerrmod module~esmf_f90interfacemod->module~esmf_utiltypesmod

Arguments

Type IntentOptional Attributes Name
type(ESMF_Pointer) :: arrayInPtr
type(ESMF_Pointer) :: arrayOutPtr
type(ESMF_DataCopy_Flag) :: datacopyflag
integer :: rc

Calls

proc~~f_esmf_localarraycopyf90ptr~~CallsGraph proc~f_esmf_localarraycopyf90ptr f_esmf_localarraycopyf90ptr esmf_localarraycopyf90ptr esmf_localarraycopyf90ptr proc~f_esmf_localarraycopyf90ptr->esmf_localarraycopyf90ptr proc~esmf_logfounderror ESMF_LogFoundError proc~f_esmf_localarraycopyf90ptr->proc~esmf_logfounderror 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 c_esmc_loggeterrormsg c_esmc_loggeterrormsg proc~esmf_logrc2msg->c_esmc_loggeterrormsg 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

Source Code

subroutine f_esmf_localarraycopyf90ptr(arrayInPtr, arrayOutPtr, datacopyflag, rc)
  use ESMF_UtilTypesMod     ! ESMF base class
  use ESMF_BaseMod          ! ESMF base class
  use ESMF_LogErrMod        ! ESMF error logging
  use ESMF_LocalArrayMod
  
  implicit none

  type(ESMF_Pointer)        :: arrayInPtr
  type(ESMF_Pointer)        :: arrayOutPtr
  type(ESMF_DataCopy_Flag)  :: datacopyflag
  integer                   :: rc
  
  type(ESMF_LocalArray) :: arrayIn
  type(ESMF_LocalArray) :: arrayOut
  
  ! Very important: the pointers passed from C and used as references for
  ! arrayInArg and arrayOutArg are simple pointers to pointers from the C side.
  ! This means that there is no memory for what the F90 INITMACROS are using
  ! at that location! In order to deal with this C<->F90 difference local
  ! F90 variables are necessary to work on the F90 side and this glue code will
  ! copy the "this" member in the derived type which is the part that actually
  ! needs to be passed between C and F90.

  arrayIn%this = arrayInPtr
  ESMF_INIT_SET_CREATED(arrayIn)

  arrayOut%this = arrayOutPtr

  ! do the actual copy, allocating the required memory
  call ESMF_LocalArrayCopyF90Ptr(arrayIn, arrayOut, datacopyflag=datacopyflag, &
    rc=rc)
  if (ESMF_LogFoundError(rcToCheck=rc, &
    ESMF_ERR_PASSTHRU, &
    ESMF_CONTEXT)) return
  
end subroutine f_esmf_localarraycopyf90ptr