gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gtvarcreated.f90
Go to the documentation of this file.
1!> @file gtvarcreated.f90
2!>
3!> @author Yasuhiro MORIKAWA, Eizi TOYODA
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 Create independent variable (dimension)
9!>
10!> This subroutine is provided through gtdata_generic.
11!> @enden
12!>
13!> @ja
14!> @brief 独立変数 (次元) の作成
15!>
16!> このサブルーチンは gtdata_generic から提供されます。
17!> @endja
18!>
19
20!>
21!> @en
22!> @brief Create dimension variable
23!>
24!> Creates a variable of GT_VARIABLE type with itself as the dimension
25!> at location url with length length, and sets it to var.
26!> Like variables opened with Open, var must later be closed with Close.
27!>
28!> Specifying length == 0 makes the variable an unlimited dimension.
29!> If xtype is omitted, it defaults to "float".
30!> Creation fails if the variable already exists, but continues by
31!> overwriting if overwrite == .true..
32!> (Note: overwrite behavior is not yet guaranteed.)
33!> Omitting dims means setting a 0-dimensional variable.
34!>
35!> Since dimension variables are often auto-generated, names are
36!> auto-generated for specifications lacking a variable name part.
37!>
38!> If an error occurs during creation, outputs a message and terminates.
39!> If err is provided, returns .true. and program does not terminate.
40!> @param[out] var Variable handle
41!> @param[in] url Variable URL
42!> @param[in] length Dimension length (0 for unlimited)
43!> @param[in] xtype Data type (optional, default "float")
44!> @param[in] long_name Long name attribute (optional)
45!> @param[in] overwrite Allow overwrite (optional)
46!> @param[out] err Error flag (optional)
47!> @enden
48!>
49!> @ja
50!> @brief 次元変数の作成
51!>
52!> 場所 url に長さ length の自分自身を次元とする変数つまり GT_VARIABLE 型
53!> の実体を作成し、それを第 1 引数 var にセットします。
54!> Open されたものと同様、第1引数 var は後で必ず Close されなければなりません。
55!>
56!> 長さ length == 0 を指定するとその変数は可変長次元となります。
57!> 型 xtype を省略すると "float" とみなされます。既存変数があるとき
58!> 失敗しますが、overwrite == .true. であれば上書きして続行します。
59!> (まだ overwrite の動作は保障されていません)。
60!> dims の省略は 0 次元変数の設定を意味します。
61!>
62!> 次元変数は自動生成されることが多いため、変数名部を欠く指定に対しては
63!> 名前を自動生成します。
64!>
65!> 作成の際にエラーが生じた場合、メッセージを出力してプログラムは
66!> 強制終了します。err を与えてある場合にはこの引数に .true.
67!> が返り、プログラムは終了しません。
68!> @param[out] var 変数ハンドル
69!> @param[in] url 変数URL
70!> @param[in] length 次元長 (0で可変長)
71!> @param[in] xtype データ型 (省略可能、デフォルトは "float")
72!> @param[in] long_name 長い名前属性 (省略可能)
73!> @param[in] overwrite 上書き許可 (省略可能)
74!> @param[out] err エラーフラグ (省略可能)
75!> @endja
76!>
77subroutine gtvarcreated(var, url, length, xtype, long_name, overwrite, err)
78 use dc_string, only: strhead
79 use gtdata_types, only: gt_variable
83 use gtdata_internal_map, only: map_create, vtb_class_netcdf, gtvar_dump
84 use dc_url, only: urlsplit, urlmerge
86 use dc_error, only: storeerror, dc_noerr
87 use dc_types, only: string
88 implicit none
89 type(gt_variable), intent(out):: var
90 character(len = *), intent(in):: url
91 integer, intent(in):: length
92 character(len = *), intent(in), optional:: xtype
93 character(len = *), intent(in), optional:: long_name
94 logical, intent(in), optional:: overwrite
95 logical, intent(out), optional:: err
96 character(len = STRING):: fnam, vnam, new_url, data_class
97 type(gd_nc_variable):: gdnc
98 integer :: stat, cause_i
99 character(len = *), parameter:: subname = "GTVarCreateD"
100 character(len = *), parameter:: version = &
101 & '$Name: $' // &
102 & '$Id: gtvarcreated.f90,v 1.5 2009-05-25 09:55:58 morikawa Exp $'
103continue
104 call beginsub(subname, 'url=<%c> length=%d', &
105 & c1=trim(url), i=(/length/), version=version)
106 stat = dc_noerr
107 cause_i = 0
108 data_class = ''
109 ! URL の検査
110 call urlsplit(url, file=fnam, var=vnam)
111 if (vnam == "") then
112 call gtdatatmpnam(file=fnam, base="dim", result=new_url)
113 else
114 new_url = url
115 endif
116 ! gdnc 形式が選択される場合は
117 call create(var=gdnc, url=new_url, length=length, xtype=xtype, &
118 & overwrite=overwrite, err=err)
119 if (present(long_name)) then
120 call put_attr(gdnc, 'long_name', long_name, err=err)
121 endif
122 call map_create(var, vtb_class_netcdf, gdnc%id, 1, (/length/), stat)
123 if (stat /= dc_noerr) then
124 cause_i = 1
125 goto 999
126 end if
127 call gtvar_dump(var)
128 data_class = 'netcdf'
129999 continue
130 call storeerror(stat, subname, err, cause_i=cause_i)
131 call endsub(subname, 'class=%c mapid=%d', &
132 & c1=trim(data_class), i=(/var%mapid/) )
133end subroutine gtvarcreated
subroutine gtvarcreated(var, url, length, xtype, long_name, overwrite, err)
Error handling module.
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public dc_noerr
Error storage variables
Definition dc_error.f90:468
Handling character types.
Definition dc_string.f90:83
Debug tracing module.
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:680
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:476
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:599
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public string
Character length for string
Definition dc_types.f90:137
Variable URL string parser.
Definition dc_url.f90:61
subroutine, public map_create(var, class, cid, ndims, allcount, stat)