57 integer,
intent(in):: dimord
58 logical,
intent(in),
optional:: count_compact
59 logical,
intent(out),
optional:: err
60 integer:: sclass, scid, ld, sndims, stat, udimord, idimord, cause_i
65 character(STRING) :: endsub_msg
66 character(len = *),
parameter:: subname =
"GTVarOpen-By-Dimord" 67 character(len = *),
parameter:: version = &
69 &
'$Id: gtvaropenbydimord.f90,v 1.5 2009-07-04 04:58:06 morikawa Exp $' 71 call beginsub(subname,
'var.mapid=%d dimord=%d ', &
72 & i=(/source_var%mapid, dimord/), version=version)
79 call map_dup(var, source_var)
80 if (
present(err)) err = .false.
87 call map_lookup(source_var, ndims=sndims)
88 if (sndims <= 0 .or. dimord > sndims)
then 92 allocate(map_src(sndims))
93 call map_lookup(source_var, map=map_src)
95 if (present_and_true(count_compact))
then 100 call dbgmessage(
'count_compact=%y', l=(/cnt_compact/))
102 if (cnt_compact)
then 105 udimord = dimord_skip_compact(dimord, map=map_src)
107 if (udimord <= 0 .or. udimord >
size(map_src))
then 108 stat = gt_enomoredims
112 idimord = map_src(udimord)%dimno
113 if (idimord < 1)
then 114 call gt_open(var, map_src(udimord)%url, err=err)
121 call var_class(source_var, sclass, scid)
122 if (sclass == vtb_class_netcdf)
then 123 call open(gdnc, gd_nc_variable(scid), idimord, err)
124 call inquire(gdnc, dimlen=ld)
125 call map_create(var, vtb_class_netcdf, gdnc%id, 1, (/ld/), stat)
126 if (stat /= dc_noerr)
then 130 call map_lookup(var, map=map_result)
131 map_result(1)%offset = map_src(udimord)%offset
132 map_result(1)%step = map_src(udimord)%step
133 map_result(1)%allcount = map_src(udimord)%allcount
134 map_result(1)%start = map_src(udimord)%start
135 map_result(1)%count = map_src(udimord)%count
136 map_result(1)%stride = map_src(udimord)%stride
137 call map_set(var, map=map_result, stat=stat)
138 else if (sclass == vtb_class_memory)
then 146 endsub_msg = CPrintf(
'result_var=%d', i=(/var%mapid/))
148 call storeerror(stat, subname, cause_i=cause_i, err=err)
149 call endsub(subname,
'%c', c1=trim(endsub_msg))
subroutine map_dup(var, source_var)
logical function, public present_and_true(arg)
integer, parameter, public gt_efake
integer function dimord_skip_compact(dimord, map)
subroutine, public map_create(var, class, cid, ndims, allcount, stat)
subroutine map_set(var, map, stat)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Handling character types.
Provides kind type parameter values.
subroutine gtvaropenbydimord(var, source_var, dimord, count_compact, err)
subroutine, public map_lookup(var, vid, map, ndims)
integer, parameter, public gt_enomoredims
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
subroutine, public var_class(var, class, cid)
integer, parameter, public string
Character length for string.