Path: | gtvargetnum.f90 |
Last Update: | Sun Jun 04 21:48:43 JST 2006 |
Authors: | Yasuhiro MORIKAWA, Eizi TOYODA |
Version: | $Id: gtvargetnum.f90,v 1.4 2006/06/04 12:48:43 morikawa Exp $ |
Tag Name: | $Name: gt4f90io-20060627 $ |
Copyright: | Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved. |
License: | See COPYRIGHT |
以下のサブルーチン、関数は gtdata_generic から gtdata_generic#Get として提供されます。
Subroutine : | |
var : | type(GT_VARIABLE), intent(inout) |
value(*) : | real(DP), intent(out) |
nvalue : | integer, intent(in) |
err : | logical, intent(out), optional |
変数 var から value に数値データが入力されます。 nvalue には配列長を代入する必要があります。
数値データ入力の際にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。
入力しようとするデータの型が引数の型と異なる場合、データは引数の 型に変換されます。 この変換は netCDF の機能を用いています。 詳しくは netCDF 日本語版マニュアル の 3.3 型変換 を参照してください。
Get は複数のサブルーチンの総称名であり、 value にポインタ型の配列を与えることも可能です。上記の サブルーチンを参照してください。
subroutine GTVarGetDouble(var, value, nvalue, err) ! ! !== 固定長配列への数値データの入力 ! ! 変数 *var* から *value* に数値データが入力されます。 ! *nvalue* には配列長を代入する必要があります。 ! ! 数値データ入力の際にエラーが生じた場合、メッセージを出力 ! してプログラムは強制終了します。*err* を与えてある場合には ! の引数に .true. が返り、プログラムは終了しません。 ! ! 入力しようとするデータの型が引数の型と異なる場合、データは引数の ! 型に変換されます。 この変換は netCDF の機能を用いています。 ! 詳しくは {netCDF 日本語版マニュアル}[link:../xref.htm#label-10] ! の 3.3 型変換 を参照してください。 ! ! *Get* は複数のサブルーチンの総称名であり、 ! *value* にポインタ型の配列を与えることも可能です。上記の ! サブルーチンを参照してください。 ! ! use gtdata_types, only: GT_VARIABLE use gt_map, only: var_class, vtb_class_netcdf, map_to_internal_specs, gtvar_dump use an_generic, only: get, AN_VARIABLE use dc_types, only: DP use dc_trace, only: BeginSub, EndSub use dc_error, only: StoreError, GT_EFAKE implicit none type(GT_VARIABLE), intent(inout) :: var real(DP), intent(out) :: value(*) integer, intent(in) :: nvalue logical, intent(out), optional:: err integer :: class, cid, stat integer , pointer :: specs(:, :) character(len = *), parameter:: subname = 'GTVarGetDouble' continue call var_class(var, class, cid) call BeginSub(subname, 'nvalue=%d', i=(/nvalue/)) call gtvar_dump(var) call map_to_internal_specs(var, specs) if (class == vtb_class_netcdf) then call get(an_variable(cid), start=specs(:, 1), count=specs(:, 2), stride=specs(:, 3), imap=specs(:, 4), siz=nvalue, value=value, iostat=stat) else stat = GT_EFAKE endif if (associated(specs)) deallocate(specs) call StoreError(stat, subname, err) call EndSub(subname, 'stat=%d', i=(/stat/)) end subroutine GTVarGetDouble
Subroutine : | |
var : | type(GT_VARIABLE), intent(inout) |
value(*) : | real, intent(out) |
nvalue : | integer, intent(in) |
err : | logical, intent(out), optional |
subroutine GTVarGetReal(var, value, nvalue, err) ! ! use gtdata_types, only: GT_VARIABLE use gt_map, only: var_class, vtb_class_netcdf, map_to_internal_specs, gtvar_dump use an_generic, only: get, AN_VARIABLE use dc_types, only: DP use dc_trace, only: BeginSub, EndSub use dc_error, only: StoreError, GT_EFAKE implicit none type(GT_VARIABLE), intent(inout) :: var real, intent(out) :: value(*) integer, intent(in) :: nvalue logical, intent(out), optional:: err integer :: class, cid, stat integer , pointer :: specs(:, :) character(len = *), parameter:: subname = 'GTVarGetReal' continue call var_class(var, class, cid) call BeginSub(subname, 'nvalue=%d', i=(/nvalue/)) call gtvar_dump(var) call map_to_internal_specs(var, specs) if (class == vtb_class_netcdf) then call get(an_variable(cid), start=specs(:, 1), count=specs(:, 2), stride=specs(:, 3), imap=specs(:, 4), siz=nvalue, value=value, iostat=stat) else stat = GT_EFAKE endif if (associated(specs)) deallocate(specs) call StoreError(stat, subname, err) call EndSub(subname, 'stat=%d', i=(/stat/)) end subroutine GTVarGetReal