45
50 use netcdf, only: nf90_max_name, nf90_noerr, nf90_char, nf90_inquire_attribute, nf90_get_att
53 implicit none
54 type(GD_NC_VARIABLE), intent(in):: var
55 character(len = *), intent(in):: name
56 logical, intent(out):: value
57 logical, intent(in), optional:: default
58 type(GD_NC_VARIABLE_ENTRY):: ent
59 character(len = STRING):: cbuffer
60 character(len = 7):: c_default
61 character(len = NF90_MAX_NAME):: aname
62 real, allocatable:: rbuf(:)
63 integer:: stat, xtype, attrlen
64 integer:: varid
66 if (stat /= nf90_noerr) goto 999
67
69 & varid=varid, nf_attrname=aname)
70 stat = nf90_inquire_attribute(ent%fileid, varid, aname, xtype=xtype, len=attrlen)
71 if (stat /= nf90_noerr) goto 999
72 if (xtype == nf90_char) then
73 c_default = "0"
74 if (present(default)) then
75 if (default) c_default = "1"
76 endif
77 call get_attr(var, name, cbuffer, c_default, stat)
78
79 select case(cbuffer)
80 case("", "0", "0.0", "0.", ".0", "FALSE", "false", ".FALSE.", &
81 & ".false.", "F", "f", "0.0D0", "0.0d0")
82 value = .false.
83 case default
84 value = .true.
85 end select
86 else
87 allocate(rbuf(attrlen))
88 stat = nf90_get_att(ent%fileid, varid, aname, rbuf)
89 if (stat /= nf90_noerr) goto 999
90 value = (abs(rbuf(1)) > tiny(0.0))
91 endif
92 return
93
94999 continue
95 value = .false.
96 if (present(default)) value = default
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
integer function, public vtable_lookup(var, entry)