gtvargetslice.f90

Path: src/gtvargetslice.f90
Last Update: Wed Jul 20 18:22:24 JST 2005

Copyright (C) GFD Dennou Club, 2000. All rights reserved.

Methods

Included Modules

gtdata_types gt_map

Public Instance methods

var :type(gt_variable), intent(in)
dimord :integer, intent(in)
start :integer, intent(out), optional
count :integer, intent(out), optional
stride :integer, intent(out), optional
count_compact :logical, intent(in), optional

[Source]

subroutine GTVarGetSlice(var, dimord, start, count, stride, count_compact)

    implicit none
    type(gt_variable), intent(in):: var
    integer, intent(in):: dimord
    integer, intent(out), optional:: start
    integer, intent(out), optional:: count
    integer, intent(out), optional:: stride
    logical, intent(in), optional:: count_compact
    type(gt_dimmap), pointer:: map(:)
    integer:: vid, udimord, ndims
    logical:: allmode
continue
    allmode = .true.
    if (present(count_compact)) allmode = count_compact
    call map_lookup(var, vid=vid, ndims=ndims)
    if (vid < 0 .or. ndims <= 0) goto 999
    allocate(map(ndims))
    call map_lookup(var, map=map)
    if (allmode) then
        udimord = dimord
    else
        udimord = dimord_skip_compact(dimord, map)
    endif
    if (udimord < 1 .or. udimord > size(map)) goto 997

    if (present(start)) start = map(udimord)%start
    if (present(count)) count = map(udimord)%count
    if (present(stride)) stride = map(udimord)%stride
    deallocate(map)
    return

997 continue
    deallocate(map)
999 continue
    if (present(start)) start = -1
    if (present(count)) count = -1
    if (present(stride)) stride = -1
end subroutine

[Validate]