gdncvargetnum.f90
Go to the documentation of this file.
1 ! -*- coding: utf-8; mode: f90 -*-
2 !-------------------------------------------------------------------------------------
3 ! Copyright (c) 2000-2016 Gtool Development Group. All rights reserved.
4 !-------------------------------------------------------------------------------------
5 ! ** Important**
6 !
7 ! This file is generated from gdncvargetnum.erb by ERB included Ruby 2.3.1.
8 ! Please do not edit this file directly. @see "gdncvargetnum.erb"
9 !-------------------------------------------------------------------------------------
10 !
11 != Get GD_NC_VARIABLES
12 !
13 ! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
14 ! Version:: $Id: gdncvargetnum.rb2f90,v 1.3 2009-07-26 08:29:59 morikawa Exp $
15 ! Tag Name:: $Name: $
16 ! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
17 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
18 !
19 ! 以下のサブルーチン、関数は gtdata_netcdf_generic から gtdata_generic#Get
20 ! として提供されます。
21 !
22 subroutine gdncvargetreal(var, start, cnt, stride, imap, siz, val, iostat)
25  use netcdf, only: &
26  & nf90_noerr, &
27  & nf90_einval, &
28  & nf90_eindefine, &
29  & nf90_get_var, &
30  & nf90_redef, &
31  & nf90_enddef
32  use dc_types, only: sp
33  implicit none
34  type(gd_nc_variable), intent(in):: var
35  integer, intent(in):: start(:)
36  integer, intent(in):: cnt(:)
37  integer, intent(in):: stride(:)
38  integer, intent(in):: imap(:)
39  ! NetCDF変数と内部データ配列のメモリ内構
40  ! 造間のマッピングを指定する整数ベクトル.
41  ! 詳しくは NetCDF マニュアル
42  ! (NF_PUT_VARM_type 等 を参照のこと)
43  integer, intent(in):: siz
44  real(SP), intent(out):: val(siz)
45  integer, intent(out):: iostat
46  integer:: nd ! var が保持する変数が依存する次元変数の数
47  integer:: ipos, i
48  type(gd_nc_variable_entry):: ent
49  integer, allocatable:: istart(:), istride(:), iimap(:)
50  character(*), parameter:: subname = 'GDNcVarGetReal'
51  continue
52  iostat = vtable_lookup(var, ent)
53  if (iostat /= nf90_noerr) goto 999
54  ! --- nd check ---
55  nd = 0
56  if (associated(ent%dimids)) nd = size(ent%dimids)
57  if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
58  iostat = nf90_einval
59  goto 999
60  endif
61  if (nd == 0) then
62  iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
63  goto 999
64  endif
65  ! --- stride ovarwrite buffer ---
66  allocate(istart(nd), istride(nd), iimap(nd))
67  istart(1:nd) = start(1:nd)
68  istride(1:nd) = stride(1:nd)
69  iimap(1:nd) = imap(1:nd)
70  ipos = 1
71  ! --- do read ---
72  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
73  if (iostat == nf90_eindefine) then
74  iostat = nf90_enddef(ent%fileid)
75  if (iostat /= nf90_noerr) return
76  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
77  if (iostat /= nf90_noerr) return
78  iostat = nf90_redef(ent%fileid)
79  if (iostat /= nf90_noerr) return
80  end if
81  deallocate(istart, istride, iimap)
82 999 continue
83 end subroutine gdncvargetreal
84 
85 subroutine gdncvargetdouble(var, start, cnt, stride, imap, siz, val, iostat)
88  use netcdf, only: &
89  & nf90_noerr, &
90  & nf90_einval, &
91  & nf90_eindefine, &
92  & nf90_get_var, &
93  & nf90_redef, &
94  & nf90_enddef
95  use dc_types, only: dp
96  implicit none
97  type(gd_nc_variable), intent(in):: var
98  integer, intent(in):: start(:)
99  integer, intent(in):: cnt(:)
100  integer, intent(in):: stride(:)
101  integer, intent(in):: imap(:)
102  ! NetCDF変数と内部データ配列のメモリ内構
103  ! 造間のマッピングを指定する整数ベクトル.
104  ! 詳しくは NetCDF マニュアル
105  ! (NF_PUT_VARM_type 等 を参照のこと)
106  integer, intent(in):: siz
107  real(DP), intent(out):: val(siz)
108  integer, intent(out):: iostat
109  integer:: nd ! var が保持する変数が依存する次元変数の数
110  integer:: ipos, i
111  type(gd_nc_variable_entry):: ent
112  integer, allocatable:: istart(:), istride(:), iimap(:)
113  character(*), parameter:: subname = 'GDNcVarGetDouble'
114  continue
115  iostat = vtable_lookup(var, ent)
116  if (iostat /= nf90_noerr) goto 999
117  ! --- nd check ---
118  nd = 0
119  if (associated(ent%dimids)) nd = size(ent%dimids)
120  if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
121  iostat = nf90_einval
122  goto 999
123  endif
124  if (nd == 0) then
125  iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
126  goto 999
127  endif
128  ! --- stride ovarwrite buffer ---
129  allocate(istart(nd), istride(nd), iimap(nd))
130  istart(1:nd) = start(1:nd)
131  istride(1:nd) = stride(1:nd)
132  iimap(1:nd) = imap(1:nd)
133  ipos = 1
134  ! --- do read ---
135  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
136  if (iostat == nf90_eindefine) then
137  iostat = nf90_enddef(ent%fileid)
138  if (iostat /= nf90_noerr) return
139  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
140  if (iostat /= nf90_noerr) return
141  iostat = nf90_redef(ent%fileid)
142  if (iostat /= nf90_noerr) return
143  end if
144  deallocate(istart, istride, iimap)
145 999 continue
146 end subroutine gdncvargetdouble
147 
148 subroutine gdncvargetint(var, start, cnt, stride, imap, siz, val, iostat)
151  use netcdf, only: &
152  & nf90_noerr, &
153  & nf90_einval, &
154  & nf90_eindefine, &
155  & nf90_get_var, &
156  & nf90_redef, &
157  & nf90_enddef
158  implicit none
159  type(gd_nc_variable), intent(in):: var
160  integer, intent(in):: start(:)
161  integer, intent(in):: cnt(:)
162  integer, intent(in):: stride(:)
163  integer, intent(in):: imap(:)
164  ! NetCDF変数と内部データ配列のメモリ内構
165  ! 造間のマッピングを指定する整数ベクトル.
166  ! 詳しくは NetCDF マニュアル
167  ! (NF_PUT_VARM_type 等 を参照のこと)
168  integer, intent(in):: siz
169  integer, intent(out):: val(siz)
170  integer, intent(out):: iostat
171  integer:: nd ! var が保持する変数が依存する次元変数の数
172  integer:: ipos, i
173  type(gd_nc_variable_entry):: ent
174  integer, allocatable:: istart(:), istride(:), iimap(:)
175  character(*), parameter:: subname = 'GDNcVarGetInt'
176  continue
177  iostat = vtable_lookup(var, ent)
178  if (iostat /= nf90_noerr) goto 999
179  ! --- nd check ---
180  nd = 0
181  if (associated(ent%dimids)) nd = size(ent%dimids)
182  if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
183  iostat = nf90_einval
184  goto 999
185  endif
186  if (nd == 0) then
187  iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
188  goto 999
189  endif
190  ! --- stride ovarwrite buffer ---
191  allocate(istart(nd), istride(nd), iimap(nd))
192  istart(1:nd) = start(1:nd)
193  istride(1:nd) = stride(1:nd)
194  iimap(1:nd) = imap(1:nd)
195  ipos = 1
196  ! --- do read ---
197  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
198  if (iostat == nf90_eindefine) then
199  iostat = nf90_enddef(ent%fileid)
200  if (iostat /= nf90_noerr) return
201  iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
202  if (iostat /= nf90_noerr) return
203  iostat = nf90_redef(ent%fileid)
204  if (iostat /= nf90_noerr) return
205  end if
206  deallocate(istart, istride, iimap)
207 999 continue
208 end subroutine gdncvargetint
209 
integer function, public vtable_lookup(var, entry)
subroutine gdncvargetreal(var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetint(var, start, cnt, stride, imap, siz, val, iostat)
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
subroutine gdncvargetdouble(var, start, cnt, stride, imap, siz, val, iostat)
種別型パラメタを提供します。
Definition: dc_types.f90:49
integer, parameter, public sp
単精度実数型変数
Definition: dc_types.f90:73