gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gtvaraddmember.f90
Go to the documentation of this file.
1!> @file gtvaraddmember.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 Add gt_structure_member attribute to structure variable
9!>
10!> This subroutine is provided as gtdata_generic#Add_Member
11!> through gtdata_generic.
12!> @enden
13!>
14!> @ja
15!> @brief 構造型変数の gt_structure_member 属性の追加
16!>
17!> このサブルーチンは gtdata_generic から gtdata_generic#Add_Member
18!> として提供されます。
19!> @endja
20!>
21
22!>
23!> @en
24!> @brief Add member to structure variable
25!>
26!> Adds the variable name part of member_url to the gt_structure_member
27!> attribute of variable var (see "4. Structure Variables" in
28!> gtool4 netCDF Convention).
29!> @param[inout] var Variable handle
30!> @param[in] member_url URL of member variable to add
31!> @param[in] link_name Link name (optional)
32!> @enden
33!>
34!> @ja
35!> @brief 構造型変数にメンバを追加
36!>
37!> 変数 var の gt_structure_member 属性 (gtool4 netCDF 規約の
38!> 「4. 構造体変数」参照) に member_url の変数名部分を追加します。
39!> @param[inout] var 変数ハンドル
40!> @param[in] member_url 追加するメンバ変数のURL
41!> @param[in] link_name リンク名 (省略可能)
42!> @endja
43!>
44subroutine gtvaraddmember(var, member_url, link_name)
45 use gtdata_types, only: gt_variable
46 use dc_types, only: string
47 use dc_url, only: urlsplit
49 use dc_error
50 implicit none
51 type(gt_variable), intent(inout):: var
52 character(len = *), intent(in):: member_url
53 character(len = *), intent(in), optional:: link_name
54 character(len = string):: members, myshortname, conv
55continue
56 ! 短縮名称の決定
57 ! 既存のメンバ名に重複しないものを選ぶ
58 call get_attr(var, 'gt_structure_member', members)
59 if (present(link_name)) then
60 if (index(members, ' ' //link_name) == 0) then
61 myshortname = link_name
62 goto 1000
63 endif
64 endif
65 conv = member_url
66 call urlsplit(conv, var=myshortname)
67 ! fake 判定
68 if (index(members, trim(myshortname)) /= 0) then
69 call storeerror(gt_efake, "GTVarAddMember(making unique name)")
70 endif
711000 continue
72 members = trim(members) // ' ' // trim(myshortname)
73 call put_attr(var, 'gt_structure_member', trim(members))
74 myshortname = 'gt_structure_link_' // trim(myshortname)
75 call put_attr(var, myshortname, trim(member_url))
76
77end subroutine gtvaraddmember
subroutine gtvaraddmember(var, member_url, link_name)
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 gt_efake
Positive error numbers are reserved for libc system error messages. Due to high system dependency and...
Definition dc_error.f90:503
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