gtvaropen.f90
Go to the documentation of this file.
1 != gtvaropen.f90 - gtool4 データのオープン
2 !
3 ! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
4 ! Version:: $Id: gtvaropen.f90,v 1.4 2009-05-25 09:55:57 morikawa Exp $
5 ! Tag Name:: $Name: $
6 ! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
7 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
8 !
9 ! 以下のサブルーチン, 関数は gtdata_generic から提供されます。
10 !
11 
12 subroutine gtvaropen(var, url, writable, err)
13  !
14  !== gtool4 データのオープン
15  !
16  ! *url* で識別される gtool 変数を開き、*var* に格納します。
17  ! *writable* を <tt>.true.</tt> に指定すると書き込み可で開こうとします。
18  ! デフォルトは書き込み不可で開きます。
19  ! (まだ *writable* の動作は保障されていません)。
20  !
21  ! Open された変数は必ず Close されなければなりません。
22  !
23  ! エラーが発生した場合、引数 *err* が与えられる場合は *err* が
24  ! <tt>.true.</tt> となって返ります。
25  ! 引数 *err* を与えなければプログラムは停止します。
26  !
27  ! *Open* は 2 つのサブルーチンの総称名であり、
28  ! ある変数の次元を指定することで開くことも可能です。
29  ! 上記のサブルーチンを参照ください。
30  !
31  !=== 補足
32  !
33  ! 上記の Open を参照してください。
34  !
35  use dc_string, only: strhead
36  use dc_types, only: string
37  use gtdata_types, only: gt_variable
38  use gtdata_generic, only: limit
39  use gtdata_internal_map, only: map_create, vtb_class_netcdf, vtb_class_memory, gtvar_dump
42  use dc_url, only: url_chop_iorange
44  use dc_trace, only: beginsub, endsub
45  use dc_present, only: present_and_true
46  implicit none
47  type(gt_variable), intent(out):: var
48  character(*), intent(in):: url
49  logical, intent(in), optional:: writable
50  logical, intent(out), optional:: err
51  integer:: ndims, stat, cause_i
52  character(STRING):: cause_c
53  integer, allocatable:: dimlen(:)
54  type(gd_nc_variable):: gdnc
55  character(STRING):: filevar, iorange
56  character(*), parameter:: subname = "GTVarOpen"
57  character(*), parameter:: version = &
58  & '$Name: $' // &
59  & '$Id: gtvaropen.f90,v 1.4 2009-05-25 09:55:57 morikawa Exp $'
60 continue
61  call beginsub(subname, fmt='<%c>', c1=trim(url), version=version)
62  stat = dc_noerr
63  cause_i = 0
64  cause_c = ''
65  var = gt_variable(-1)
66  call url_chop_iorange(url, iorange=iorange, remainder=filevar)
67  if (strhead(filevar, "memory:")) then
68  stat = gt_efake
69  cause_c = 'GTVarOpen(memory:)'
70  goto 999
71  else
72  call open(gdnc, filevar, writable, err)
73  if ( present_and_true(err) ) then
74  stat = gt_enotvar
75  goto 999
76  end if
77  call inquire(gdnc, ndims=ndims)
78  allocate(dimlen(max(1, ndims)))
79  call inquire(gdnc, dimlen=dimlen)
80  call map_create(var, vtb_class_netcdf, gdnc%id, ndims, dimlen, stat)
81  if (stat /= dc_noerr) then
82  cause_i = ndims
83  goto 999
84  end if
85  deallocate(dimlen)
86  endif
87  call limit(var, trim(iorange))
88  call gtvar_dump(var)
89 999 continue
90  call storeerror(stat, subname, err, cause_c = cause_c, cause_i = cause_i)
91  call endsub(subname, 'mapid=%d', i=(/var%mapid/))
92 end subroutine gtvaropen
integer, parameter, public gt_enotvar
Definition: dc_error.f90:533
logical function, public present_and_true(arg)
Definition: dc_present.f90:80
integer, parameter, public gt_efake
Definition: dc_error.f90:523
subroutine, public map_create(var, class, cid, ndims, allcount, stat)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public url_chop_iorange(fullname, iorange, remainder)
Definition: dc_url.f90:201
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
Handling character types.
Definition: dc_string.f90:24
Provides kind type parameter values.
Definition: dc_types.f90:49
subroutine gtvaropen(var, url, writable, err)
Definition: gtvaropen.f90:13
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118