gtvargetsliceall.f90
Go to the documentation of this file.
1 !
2 != 変数入出力範囲限定情報を取得 (全ての次元の情報を一括取得)
3 !
4 ! Authors:: Eizi TOYODA, Yasuhiro MORIKAWA
5 ! Version:: $Id: gtvargetsliceall.f90,v 1.1 2009-03-20 09:09:51 morikawa Exp $
6 ! Tag Name:: $Name: $
7 ! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
8 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
9 !
10 ! 以下のサブルーチン、関数は gtdata_generic から gtdata_generic#Get_Slice
11 ! として提供されます。
12 
13 ! Copyright (C) GFD Dennou Club, 2000. All rights reserved.
14 
15 subroutine gtvargetsliceall(var, start, count, stride)
16  !
17  !== 変数入出力範囲限定情報を取得 (全ての次元の情報を一括取得)
18  !
19  ! 変数 *var* に関して、
20  ! Slice によって設定された入出力範囲の情報を取得します。
21  ! 全次元の入出力範囲について一括取得するため、
22  ! あらかじめ Inquire(var, alldims) して次元の数を確保
23  ! しなければなりません。
24  !
25  ! *start*, *count*, *stride* に関しては Slice を参照してください。
26  !
27  ! *Get_Slice* は 2 つのサブルーチンの総称名であり、
28  ! 他にもある1つの次元に関して情報を取得する
29  ! 方法もあります。下記のサブルーチンを参照ください。
30  !
31  use gtdata_types, only: gt_variable
32  use gtdata_generic, only: gtvargetslice
33  implicit none
34  type(gt_variable), intent(in):: var
35  integer, intent(out), optional:: start(:), count(:), stride(:)
36  integer:: nd, i
37  logical:: all
38  nd = huge(1)
39  all = present(start) .and. present(count) .and. present(stride)
40  if (present(start)) nd = min(nd, size(start))
41  if (present(count)) nd = min(nd, size(count))
42  if (present(stride)) nd = min(nd, size(stride))
43  do, i = 1, nd
44  if (all) then
45  call gtvargetslice(var, i, start(i), count(i), stride(i))
46  cycle
47  endif
48  if (present(start)) call gtvargetslice(var, i, start=start(i))
49  if (present(count)) call gtvargetslice(var, i, count=count(i))
50  if (present(stride)) call gtvargetslice(var, i, stride=stride(i))
51  enddo
52 end subroutine gtvargetsliceall
53 
subroutine gtvargetsliceall(var, start, count, stride)
subroutine gtvargetslice(var, dimord, start, count, stride, count_compact)