Path: | src/gtvargetattr.f90 |
Last Update: | Fri Aug 05 00:58:56 JST 2005 |
gtvargetattr.f90 - 数値型属性の入力 Copyright (C) GFD Dennou Club, 2000. All rights reserved.
var : | type(GT_VARIABLE), intent(in) |
attrname : | character(len = *), intent(in) |
value : | double precision, intent(out) |
default : | double precision, intent(in), optional |
スカラで受け取るのが一番簡単。解釈可能な値がとられ、残りは捨てられる。
subroutine GTVarGetAttrD(var, attrname, value, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: attrname double precision, intent(out):: value double precision, intent(in), optional:: default integer:: stat double precision:: buffer(1) type(VSTRING):: cbuffer integer:: class, cid logical:: err continue call var_class(var, class, cid) select case(class) case (vtb_class_netcdf) call get_attr(an_variable(cid), attrname, value=buffer, stat=stat, default=default) value = buffer(1) if (stat >= 1) return case (vtb_class_memory) call get_attr(mem_variable(cid), attrname, cbuffer, err) if (.not. err) then value = stod(cbuffer) return endif case default call StoreError(GT_ENOTVAR, "GTVarGetAttrR") end select value = NF_FILL_REAL if (present(default)) value = default end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | double precision, intent(out) |
default : | double precision, intent(in) |
場合は属性長があまっている場合には切り捨てられ、 属性長が足りない場合は default 値 (ポインタと違い必須) を埋める。
subroutine GTVarGetAttrDA(var, name, value, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name double precision, intent(out):: value(:) double precision, intent(in):: default double precision, pointer:: ptr(:) integer:: n, stat, class, cid continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then call get_attr(an_variable(cid), name, value, stat, default) else if (class == vtb_class_memory) then call friend(var, name, ptr) if (.not. associated(ptr)) then value(:) = default else n = min(size(ptr), size(value)) value(1:n) = ptr(1:n) if (n < size(ptr)) value(n+1: ) = default deallocate(ptr) endif else call StoreError(GT_ENOTVAR, "GTVarGetAttrRA") endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | double precision, pointer |
ポインタ配列を使って受け取る場合は解釈可能な数だけ実体が割り付けられる。
subroutine GTVarGetAttrDP(var, name, value) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name double precision, pointer:: value(:) integer:: stat, class, cid type(VSTRING):: cbuffer logical:: err continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then allocate(value(1)) call get_attr(an_variable(cid), name, value(1:0), stat) deallocate(value) if (stat < 1) return allocate(value(stat)) call get_attr(an_variable(cid), name, value, stat) if (stat < 1) deallocate(value) else if (class == vtb_class_memory) then call get_attr(mem_variable(cid), name, cbuffer, err) if (err) then nullify(value) return endif call get_array(value, cbuffer) cbuffer = "" else call StoreError(GT_ENOTVAR, "GTVarGetAttrRP") endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
attrname : | character(len = *), intent(in) |
value : | integer, intent(out) |
default : | integer, intent(in), optional |
スカラで受け取るのが一番簡単。解釈可能な値がとられ、残りは捨てられる。
subroutine GTVarGetAttrI(var, attrname, value, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: attrname integer, intent(out):: value integer, intent(in), optional:: default integer:: stat, buffer(1), class, cid type(VSTRING):: cbuffer logical:: err continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then call get_attr(an_variable(cid), attrname, buffer, stat, default) value = buffer(1) if (stat >= 1) return else if (class == vtb_class_memory) then call get_attr(mem_variable(cid), attrname, cbuffer, err) if (.not. err) then value = stoi(cbuffer) return endif else call StoreError(GT_ENOTVAR, "GTVarGetAttrI") endif value = NF_FILL_INT if (present(default)) value = default end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | integer, intent(out) |
stat : | integer |
default : | integer, intent(in) |
場合は属性長があまっている場合には切り捨てられ、 属性長が足りない場合は default 値 (ポインタと違い必須) を埋める。
subroutine GTVarGetAttrIA(var, name, value, stat, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name integer, intent(out):: value(:) integer, intent(in):: default integer, pointer:: ptr(:) integer:: n, stat, class, cid continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then call get_attr(an_variable(cid), name, value, stat, default) else if (class == vtb_class_memory) then call friend(var, name, ptr) if (.not. associated(ptr)) then value(:) = default else n = min(size(ptr), size(value)) value(1:n) = ptr(1:n) if (n < size(ptr)) value(n+1: ) = default deallocate(ptr) endif else call StoreError(GT_ENOTVAR, "GTVarGetAttrIA") endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | integer, pointer |
ポインタ配列を使って受け取る場合は解釈可能な数だけ実体が割り付けられる。
subroutine GTVarGetAttrIP(var, name, value) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name integer, pointer:: value(:) integer:: stat, class, cid type(VSTRING):: cbuffer logical:: err continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then allocate(value(1)) call get_attr(an_variable(cid), name, value(1:0), stat) deallocate(value) if (stat < 1) return allocate(value(stat)) call get_attr(an_variable(cid), name, value, stat) if (stat < 1) deallocate(value) else if (class == vtb_class_memory) then call get_attr(mem_variable(cid), name, cbuffer, err) if (err) then nullify(value) return endif call get_array(value, cbuffer) cbuffer = "" else call StoreError(GT_ENOTVAR, "GTVarGetAttrIP") endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
attrname : | character(len = *), intent(in) |
value : | real, intent(out) |
default : | real, intent(in), optional |
スカラで受け取るのが一番簡単。解釈可能な値がとられ、残りは捨てられる。
subroutine GTVarGetAttrR(var, attrname, value, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: attrname real, intent(out):: value real, intent(in), optional:: default integer:: stat real:: buffer(1) type(VSTRING):: cbuffer integer:: class, cid logical:: err continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then call get_attr(an_variable(cid), attrname, value=buffer, stat=stat, default=default) if (stat >= 1) then value = buffer(1) return endif else if (class == vtb_class_memory) then call get_attr(mem_variable(cid), attrname, cbuffer, err) if (.not. err) then value = stod(cbuffer) return endif else call StoreError(GT_EBADVAR, "GTVarGetAttrR") endif if (present(default)) then value = default else value = NF_FILL_REAL endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | real, intent(out) |
default : | real, intent(in) |
場合は属性長があまっている場合には切り捨てられ、 属性長が足りない場合は default 値 (ポインタと違い必須) を埋める。
subroutine GTVarGetAttrRA(var, name, value, default) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name real, intent(out):: value(:) real, intent(in):: default real, pointer:: ptr(:) integer:: n, class, cid, stat continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then call get_attr(an_variable(cid), name, value, stat, default) else if (class == vtb_class_memory) then call friend(var, name, ptr) if (.not. associated(ptr)) then value(:) = default else n = min(size(ptr), size(value)) value(1:n) = ptr(1:n) if (n < size(ptr)) value(n+1: ) = default deallocate(ptr) endif else call StoreError(GT_ENOTVAR, "GTVarGetAttrRA") endif end subroutine
var : | type(GT_VARIABLE), intent(in) |
name : | character(len = *), intent(in) |
value(:) : | real, pointer |
ポインタ配列を使って受け取る場合は解釈可能な数だけ実体が割り付けられる。
subroutine GTVarGetAttrRP(var, name, value) implicit none type(GT_VARIABLE), intent(in):: var character(len = *), intent(in):: name real, pointer:: value(:) integer:: stat, class, cid type(VSTRING):: cbuffer logical:: err continue call var_class(var, class, cid) if (class == vtb_class_netcdf) then allocate(value(1)) call get_attr(an_variable(cid), name, value(1:0), stat) deallocate(value) if (stat < 1) return allocate(value(stat)) call get_attr(an_variable(cid), name, value, stat) if (stat < 1) deallocate(value) else if (class == vtb_class_memory) then call get_attr(mem_variable(cid), name, cbuffer, err) if (err) then nullify(value) return endif call get_array(value, cbuffer) cbuffer = "" else nullify(value) call StoreError(GT_ENOTVAR, "GTVarGetAttrRP") endif end subroutine