f_esmf_xgridgetsparsematx2b Subroutine

subroutine f_esmf_xgridgetsparsematx2b(xgrid, sideBIndex_base0, factorListCount, factorList, factorIndexList, rc)

Uses

  • proc~~f_esmf_xgridgetsparsematx2b~~UsesGraph proc~f_esmf_xgridgetsparsematx2b f_esmf_xgridgetsparsematx2b iso_c_binding iso_c_binding proc~f_esmf_xgridgetsparsematx2b->iso_c_binding module~esmf_basemod ESMF_BaseMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_basemod module~esmf_logerrmod ESMF_LogErrMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_logerrmod module~esmf_utiltypesmod ESMF_UtilTypesMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_utiltypesmod module~esmf_xgridcreatemod ESMF_XGridCreateMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_xgridcreatemod module~esmf_xgridgeombasemod ESMF_XGridGeomBaseMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_xgridgeombasemod module~esmf_xgridgetmod ESMF_XGridGetMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_xgridgetmod module~esmf_xgridmod ESMF_XGridMod proc~f_esmf_xgridgetsparsematx2b->module~esmf_xgridmod module~esmf_basemod->iso_c_binding module~esmf_basemod->module~esmf_logerrmod module~esmf_basemod->module~esmf_utiltypesmod 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 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_xgridcreatemod->module~esmf_basemod module~esmf_xgridcreatemod->module~esmf_logerrmod module~esmf_xgridcreatemod->module~esmf_utiltypesmod module~esmf_xgridcreatemod->module~esmf_xgridgeombasemod module~esmf_xgridcreatemod->module~esmf_xgridmod module~esmf_arraymod ESMF_ArrayMod module~esmf_xgridcreatemod->module~esmf_arraymod module~esmf_distgridmod ESMF_DistGridMod module~esmf_xgridcreatemod->module~esmf_distgridmod module~esmf_f90interfacemod ESMF_F90InterfaceMod module~esmf_xgridcreatemod->module~esmf_f90interfacemod module~esmf_gridmod ESMF_GridMod module~esmf_xgridcreatemod->module~esmf_gridmod module~esmf_gridutilmod ESMF_GridUtilMod module~esmf_xgridcreatemod->module~esmf_gridutilmod module~esmf_xgridcreatemod->module~esmf_initmacrosmod module~esmf_meshmod ESMF_MeshMod module~esmf_xgridcreatemod->module~esmf_meshmod module~esmf_staggerlocmod ESMF_StaggerLocMod module~esmf_xgridcreatemod->module~esmf_staggerlocmod module~esmf_utilmod ESMF_UtilMod module~esmf_xgridcreatemod->module~esmf_utilmod module~esmf_xgridgeombasemod->module~esmf_logerrmod module~esmf_xgridgeombasemod->module~esmf_utiltypesmod module~esmf_xgridgeombasemod->module~esmf_distgridmod module~esmf_xgridgeombasemod->module~esmf_gridmod module~esmf_xgridgeombasemod->module~esmf_initmacrosmod module~esmf_xgridgeombasemod->module~esmf_meshmod module~esmf_xgridgeombasemod->module~esmf_staggerlocmod module~esmf_xgridgetmod->module~esmf_basemod module~esmf_xgridgetmod->module~esmf_logerrmod module~esmf_xgridgetmod->module~esmf_utiltypesmod module~esmf_xgridgetmod->module~esmf_xgridgeombasemod module~esmf_xgridgetmod->module~esmf_xgridmod module~esmf_xgridgetmod->module~esmf_arraymod module~esmf_delayoutmod ESMF_DELayoutMod module~esmf_xgridgetmod->module~esmf_delayoutmod module~esmf_xgridgetmod->module~esmf_distgridmod module~esmf_xgridgetmod->module~esmf_gridmod module~esmf_xgridgetmod->module~esmf_initmacrosmod module~esmf_xgridgetmod->module~esmf_meshmod module~esmf_xgridgetmod->module~esmf_staggerlocmod module~esmf_xgridgetmod->module~esmf_utilmod module~esmf_xgridmod->module~esmf_basemod module~esmf_xgridmod->module~esmf_logerrmod module~esmf_xgridmod->module~esmf_utiltypesmod module~esmf_xgridmod->module~esmf_xgridgeombasemod module~esmf_xgridmod->module~esmf_arraymod module~esmf_xgridmod->module~esmf_distgridmod module~esmf_xgridmod->module~esmf_gridmod module~esmf_xgridmod->module~esmf_initmacrosmod module~esmf_xgridmod->module~esmf_meshmod module~esmf_xgridmod->module~esmf_utilmod

Arguments

Type IntentOptional Attributes Name
type(ESMF_XGrid) :: xgrid
integer, intent(in) :: sideBIndex_base0
integer, intent(out) :: factorListCount
type(C_PTR) :: factorList
type(C_PTR) :: factorIndexList
integer, intent(out) :: rc

Calls

proc~~f_esmf_xgridgetsparsematx2b~~CallsGraph proc~f_esmf_xgridgetsparsematx2b f_esmf_xgridgetsparsematx2b interface~esmf_xgridget ESMF_XGridGet proc~f_esmf_xgridgetsparsematx2b->interface~esmf_xgridget proc~esmf_logfounderror ESMF_LogFoundError proc~f_esmf_xgridgetsparsematx2b->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~f_esmf_xgridgetsparsematx2b->proc~esmf_logseterror proc~esmf_xgridgetdefault ESMF_XGridGetDefault interface~esmf_xgridget->proc~esmf_xgridgetdefault proc~esmf_xgridgetdg ESMF_XGridGetDG interface~esmf_xgridget->proc~esmf_xgridgetdg proc~esmf_xgridgetele ESMF_XGridGetEle interface~esmf_xgridget->proc~esmf_xgridgetele proc~esmf_xgridgetgb ESMF_XGridGetGB interface~esmf_xgridget->proc~esmf_xgridgetgb proc~esmf_xgridgetgeomobj ESMF_XGridGetGeomObj interface~esmf_xgridget->proc~esmf_xgridgetgeomobj proc~esmf_xgridgetsmmspecfrac ESMF_XGridGetSMMSpecFrac interface~esmf_xgridget->proc~esmf_xgridgetsmmspecfrac 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 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_xgridgetdefault->proc~esmf_logfounderror proc~esmf_xgridgetdefault->proc~esmf_logseterror c_esmc_meshgetdimensions c_esmc_meshgetdimensions proc~esmf_xgridgetdefault->c_esmc_meshgetdimensions interface~esmf_distgridget ESMF_DistGridGet proc~esmf_xgridgetdefault->interface~esmf_distgridget proc~esmf_getname ESMF_GetName proc~esmf_xgridgetdefault->proc~esmf_getname proc~esmf_imerr ESMF_IMErr proc~esmf_xgridgetdefault->proc~esmf_imerr proc~esmf_xgridgeombaseget ESMF_XGridGeomBaseGet proc~esmf_xgridgetdefault->proc~esmf_xgridgeombaseget proc~esmf_xgridgetinit ESMF_XGridGetInit proc~esmf_xgridgetdefault->proc~esmf_xgridgetinit proc~esmf_xgridgetdg->proc~esmf_logseterror proc~esmf_xgridgetdg->proc~esmf_imerr proc~esmf_xgridgetdg->proc~esmf_xgridgetinit proc~esmf_xgridgetele->proc~esmf_logfounderror proc~esmf_xgridgetele->interface~esmf_distgridget proc~esmf_delayoutget ESMF_DELayoutGet proc~esmf_xgridgetele->proc~esmf_delayoutget proc~esmf_xgridgetele->proc~esmf_imerr proc~esmf_xgridgetele->proc~esmf_xgridgetinit proc~esmf_xgridgetgb->proc~esmf_logseterror proc~esmf_xgridgetgb->proc~esmf_imerr proc~esmf_xgridgetgb->proc~esmf_xgridgetinit proc~esmf_xgridgetgeomobj->proc~esmf_logseterror proc~esmf_xgridgetgeomobj->proc~esmf_imerr proc~esmf_xgridgetgeomobj->proc~esmf_xgridgetinit proc~esmf_xgridgetsmmspecfrac->proc~esmf_logfounderror proc~esmf_xgridgetsmmspecfrac->proc~esmf_logseterror esmf_arraycopy esmf_arraycopy proc~esmf_xgridgetsmmspecfrac->esmf_arraycopy proc~esmf_xgridgetsmmspecfrac->proc~esmf_imerr proc~esmf_xgridgetsmmspecfrac->proc~esmf_xgridgetinit

Source Code

  subroutine f_esmf_xgridgetsparsematx2b(xgrid,           &
                                         sideBIndex_base0, &
                                         factorListCount, &
                                         factorList,      &
                                         factorIndexList, &
                                         rc)

    use ESMF_XGridMod
    use ESMF_XGridGetMod
    use ESMF_XGridCreateMod
    use ESMF_XGridGeomBaseMod
    use ESMF_UtilTypesMod
    use ESMF_BaseMod
    use ESMF_LogErrMod
    use iso_c_binding

    implicit none

    type(ESMF_XGrid)     :: xgrid
    integer, intent(in)  :: sideBIndex_base0
    integer, intent(out) :: factorListCount
    type(C_PTR)          :: factorList
    type(C_PTR)          :: factorIndexList
    integer, intent(out) :: rc              

    ! Local Variables
    real(ESMF_KIND_R8), pointer    :: factorListFPtr(:)
    integer(ESMF_KIND_I4), pointer :: factorIndexListFPtr(:,:)
    integer :: sideBGridCount, sideBMeshCount
    type(ESMF_XGridSpec), allocatable :: sparseMatX2B(:)
    integer :: sideBIndex

    ! Init rc
    rc = ESMF_RC_NOT_IMPL

    ! Make sideA index base 1
    sideBIndex=sideBIndex_base0+1

    ! Get number of side B Grids
    call ESMF_XGridGet(xgrid, sideBGridCount=sideBGridCount, rc=rc)
    if (ESMF_LogFoundError(rc, ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Get number of side B Meshes
    call ESMF_XGridGet(xgrid, sideBMeshCount=sideBMeshCount, rc=rc)
    if (ESMF_LogFoundError(rc, ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return
    
    ! Make sure the index is not too big
    if (sideBIndex > sideBGridCount+sideBMeshCount) then
      call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
         msg="sideBIndex bigger than the number of Grids and Meshes on side B", &
         ESMF_CONTEXT, rcToReturn=rc) 
      return
    endif

    ! Make sure the index is not too small
    if (sideBIndex < 1) then
      call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
         msg="sideBIndex below 1 in Fortran or 0 in C.", &
         ESMF_CONTEXT, rcToReturn=rc) 
      return
    endif


    ! Allocate XGridSpec array
    allocate(sparseMatX2B(sideBGridCount+sideBMeshCount))

    ! Get info
    call ESMF_XGridGet(xgrid, sparseMatX2B=sparseMatX2B, rc=rc)
    if (ESMF_LogFoundError(rc, ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Get sparse matrix information
    factorListCount = size(sparseMatX2B(sideBIndex)%factorList, 1)

    ! Associate the Fortran pointers with C pointers. Only do this if
    ! factors were created during the regrid store call.
    if (factorListCount > 0) then
       factorList = C_LOC(sparseMatX2B(sideBIndex)%factorList(1))
       factorIndexList = C_LOC(sparseMatX2B(sideBIndex)%factorIndexList(1,1))
    endif

    ! set rc to success
    rc = ESMF_SUCCESS
  
  end subroutine f_esmf_xgridgetsparsematx2b