Loading...
Searching...
No Matches
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!
22subroutine 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)
82999 continue
83end subroutine gdncvargetreal
84
85subroutine 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)
145999 continue
146end subroutine gdncvargetdouble
147
148subroutine 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)
207999 continue
208end subroutine gdncvargetint
209
subroutine gdncvargetreal(var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetint(var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetdouble(var, start, cnt, stride, imap, siz, val, iostat)
Provides kind type parameter values.
Definition dc_types.f90:49
integer, parameter, public sp
Single Precision Real number.
Definition dc_types.f90:73
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:83
integer function, public vtable_lookup(var, entry)