Path: | gtool/gtool_historyauto/historyautoallvarfix.f90 |
Last Update: | Sun May 31 23:36:33 +0900 2009 |
Authors: | Yasuhiro MORIKAWA |
Version: | $Id: historyautoallvarfix.f90,v 1.2 2009-05-31 14:36:33 morikawa Exp $ |
Tag Name: | $Name: gtool5-20101228-1 $ |
Copyright: | Copyright (C) GFD Dennou Club, 2008-2009. All rights reserved. |
License: | See COPYRIGHT |
Subroutine : |
このサブルーチンは以下の動作を行います.
このサブルーチンを呼んだ後に HistoryAutoAddVariable を呼ぶと エラーを生じます.
This subroutine performs following acts.
If "HistoryAutoAddVariable" is called after this subroutine is called, an error is occurred.
subroutine HistoryAutoAllVarFix ! ! このサブルーチンは以下の動作を行います. ! ! * NAMELIST から読み込んだ変数名に無効なものが存在したかどうかをチェック. ! * HistoryAutoAddVariable で登録した変数名を印字. ! ! このサブルーチンを呼んだ後に HistoryAutoAddVariable を呼ぶと ! エラーを生じます. ! ! This subroutine performs following acts. ! ! * Check that invalid variable names are loaded from NAMELIST or not. ! * Print registered variable names by "HistoryAutoAddVariable". ! ! If "HistoryAutoAddVariable" is called after this subroutine is called, ! an error is occurred. ! use gtool_historyauto_internal, only: initialized, numdims, numvars, flag_allvarfixed, gthst_vars, gthstnml, save_mpi_gather, sub_sname use gtool_history_nmlinfo_generic, only: HstNmlInfoAllNameValid use gtool_history, only: HistoryVarinfoInquire use dc_trace, only: BeginSub, EndSub use dc_error, only: StoreError, DC_NOERR, HST_EBADVARNAME, DC_ENOTINIT use dc_message, only: MessageNotify use dc_date, only: operator(*), operator(+) use dc_string, only: JoinChar use dc_types, only: DP, STRING, TOKEN implicit none logical:: allvar_invalid ! 無効な変数名のチェックフラグ. ! Check flag of invalid variable names. integer, parameter:: names_limit = 100 character(names_limit):: names_invalid ! 無効な変数名. ! Invalid variable names. character(STRING):: name, units, longname, var_info_str character(TOKEN), pointer:: dims(:) =>null() integer:: msnot_rank integer:: stat, i character(STRING):: cause_c character(*), parameter:: subname = "HistoryAutoAllVarFix" continue call BeginSub(subname) stat = DC_NOERR cause_c = "" ! 初期設定チェック ! Check initialization ! if ( .not. initialized ) then stat = DC_ENOTINIT cause_c = 'gtool_historyauto' goto 999 end if ! 既に確定後であれば何もせずに終了. ! Nothing is done after fixed ! if ( flag_allvarfixed ) goto 999 ! 無効な変数名のチェック (初回のみ) ! Check invalid variable names (at only first time) ! call HstNmlInfoAllNameValid( gthstnml = gthstnml, invalid = allvar_invalid, names = names_invalid ) ! (out) if ( len_trim(names_invalid) > (names_limit - 5) ) then names_invalid = names_invalid(1:names_limit - 5) // ' ....' end if if ( allvar_invalid ) then stat = HST_EBADVARNAME cause_c = names_invalid call MessageNotify( 'W', subname, 'names "%c" from NAMELIST "gtool_historyauto_nml" are invalid.', c1 = trim(names_invalid) ) goto 999 end if ! 登録された変数の印字 (初回のみ) ! Print registered variables (at only first time) ! msnot_rank = -1 if ( save_mpi_gather ) msnot_rank = 0 call MessageNotify( 'M', sub_sname, '-------------------------------------------', rank_mpi = msnot_rank ) call MessageNotify( 'M', sub_sname, '----- Registered variables for output -----', rank_mpi = msnot_rank ) call MessageNotify( 'M', sub_sname, '-------------------------------------------', rank_mpi = msnot_rank ) do i = 1, numvars call HistoryVarinfoInquire( varinfo = gthst_vars(i), name = name, dims = dims, longname = longname, units = units ) ! (out) optional var_info_str = trim( longname ) // ' [' // trim( units ) // '] {' // trim( JoinChar( dims, ',' ) ) // '}' deallocate( dims ) call MessageNotify( 'M', sub_sname, ' %c (%c)', c1 = trim(name), c2 = trim(var_info_str), rank_mpi = msnot_rank ) end do call MessageNotify( 'M', sub_sname, '-----', rank_mpi = msnot_rank ) ! フラグの設定 ! Set a flag ! if ( .not. flag_allvarfixed ) flag_allvarfixed = .true. 999 continue call StoreError(stat, subname, cause_c = cause_c) call EndSub(subname, 'stat=%d', i = (/stat/) ) end subroutine HistoryAutoAllVarFix