gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gtvargetsliceall.f90
Go to the documentation of this file.
1!> @file gtvargetsliceall.f90
2!>
3!> @author Eizi TOYODA, Yasuhiro MORIKAWA
4!> @copyright Copyright (C) GFD Dennou Club, 2000-2026. All rights reserved. <br/>
5!> License is BSD-2-Clause. See [COPYRIGHT](@ref COPYRIGHT) in detail
6!>
7!> @en
8!> @brief Get variable I/O range restriction information (bulk get for all dimensions)
9!>
10!> This subroutine is provided as gtdata_generic#Get_Slice
11!> through gtdata_generic.
12!> @enden
13!>
14!> @ja
15!> @brief 変数入出力範囲限定情報を取得 (全ての次元の情報を一括取得)
16!>
17!> このサブルーチンは gtdata_generic から gtdata_generic#Get_Slice
18!> として提供されます。
19!> @endja
20!>
21
22!>
23!> @en
24!> @brief Get I/O range information for all dimensions
25!>
26!> Gets I/O range information set by Slice for variable var.
27!> To bulk get I/O range for all dimensions, must first
28!> call Inquire(var, alldims) to allocate the number of dimensions.
29!>
30!> See Slice for start, count, stride.
31!>
32!> Get_Slice is a generic name for 2 subroutines; there is also
33!> a method to get information for a single dimension.
34!> @param[in] var Variable handle
35!> @param[out] start Start array for each dimension (optional)
36!> @param[out] count Count array for each dimension (optional)
37!> @param[out] stride Stride array for each dimension (optional)
38!> @enden
39!>
40!> @ja
41!> @brief 全次元の入出力範囲情報を取得
42!>
43!> 変数 var に関して、Slice によって設定された入出力範囲の情報を取得します。
44!> 全次元の入出力範囲について一括取得するため、
45!> あらかじめ Inquire(var, alldims) して次元の数を確保しなければなりません。
46!>
47!> start, count, stride に関しては Slice を参照してください。
48!>
49!> Get_Slice は 2 つのサブルーチンの総称名であり、
50!> 他にもある1つの次元に関して情報を取得する方法もあります。
51!> @param[in] var 変数ハンドル
52!> @param[out] start 各次元の開始位置配列 (省略可能)
53!> @param[out] count 各次元のカウント配列 (省略可能)
54!> @param[out] stride 各次元のストライド配列 (省略可能)
55!> @endja
56!>
57subroutine gtvargetsliceall(var, start, count, stride)
58 use gtdata_types, only: gt_variable
60 implicit none
61 type(gt_variable), intent(in):: var
62 integer, intent(out), optional:: start(:), count(:), stride(:)
63 integer:: nd, i
64 logical:: all
65 nd = huge(1)
66 all = present(start) .and. present(count) .and. present(stride)
67 if (present(start)) nd = min(nd, size(start))
68 if (present(count)) nd = min(nd, size(count))
69 if (present(stride)) nd = min(nd, size(stride))
70 do, i = 1, nd
71 if (all) then
72 call gtvargetslice(var, i, start(i), count(i), stride(i))
73 cycle
74 endif
75 if (present(start)) call gtvargetslice(var, i, start=start(i))
76 if (present(count)) call gtvargetslice(var, i, count=count(i))
77 if (present(stride)) call gtvargetslice(var, i, stride=stride(i))
78 enddo
79end subroutine gtvargetsliceall
80
subroutine gtvargetslice(var, dimord, start, count, stride, count_compact)
subroutine gtvargetsliceall(var, start, count, stride)