gtool_historyauto_internal::hstvarsoutputcheck Interface Reference

Private Member Functions

subroutine hstvarsoutputcheck (time, stime_index)
 

Detailed Description

Definition at line 341 of file gtool_historyauto_internal.f90.

Constructor & Destructor Documentation

◆ hstvarsoutputcheck()

subroutine gtool_historyauto_internal::hstvarsoutputcheck::hstvarsoutputcheck ( real(dp), intent(in)  time,
integer, intent(out)  stime_index 
)
private

Definition at line 424 of file gtool_historyauto_internal.f90.

424  !
425  ! 与えられた時刻 *time* が各変数にとって出力のタイミングかどうかを
426  ! 調査して output_timing_vars, output_timing_avr_vars,
427  ! create_timing_vars, close_timing_vars, renew_timing_vars,
428  ! へ反映し, *time* に対応する
429  ! saved_time の配列添字を stime_index へ返します.
430  !
431  ! また, ファイルのオープンクローズのタイミングであれば,
432  ! それらもこのサブルーチン内で行います.
433  !
434  ! It is investigated whether "time" is output timing for
435  ! each variable, and the information is reflected to
436  ! "output_timing_vars", "output_timing_avr_vars",
437  ! "create_timing_vars", "close_timing_vars", "renew_timing_vars".
438  ! And index of array "saved_time" is returned to "stime_index".
439  !
440  ! And if current time is timing of open/close of files,
441  ! they are done in this subroutine.
442  !
443  use dc_trace, only: beginsub, endsub, dbgmessage
444  use dc_error, only: storeerror, dc_noerr
446  use dc_date_types, only: dc_difftime
447  use dc_date, only: operator(==), operator(>), operator(<), &
448  & operator(>=), operator(<=), operator(-), dcdifftimeputline, &
449  & evalsec
450  implicit none
451  real(DP), intent(in):: time
452  ! 現在時刻. Current time
453  integer, intent(out):: stime_index
454 
455  integer:: tstep
456  integer:: stat, i, startnum, endnum
457  character(STRING):: cause_c
458  character(*), parameter:: subname = "HstVarsOutputCheck"
459  continue
460  call beginsub(subname)
461  stat = dc_noerr
462  cause_c = ""
463 
464  ! 与えられた時刻がチェック済みかどうかを調べる
465  ! Examine whether given time is already checked or not
466  !
467  timestepsearch: do
468  do i = saved_tstep, checked_tstepnum
469  if ( saved_time(i) == time ) then
470  tstep = i
471  exit timestepsearch
472  end if
473  end do
474  do i = 1, saved_tstep - 1
475  if ( saved_time(i) == time ) then
476  tstep = i
477  exit timestepsearch
478  end if
479  end do
480 
481  tstep = 0
482  exit timestepsearch
483  end do timestepsearch
484 
485  saved_tstep = tstep
486 
487  if ( saved_tstep /= 0 .and. checked_tstep_varnum == numvars ) then
488  ! * output_timing_vars(:,saved_tstep) を使う.
489  ! * saved_tstep を stime_index として返す.
490 
491  stime_index = saved_tstep
492  call dbgmessage( 'saved_tstep=<%d> is already checked.', &
493  & i =(/ saved_tstep /) )
494  goto 999
495  end if
496 
497  ! チェックする時間ステップと, 変数 ID の設定
498  ! Configure checked time step, and variable ID
499  !
500  if ( saved_tstep /= 0 ) then
501  startnum = checked_tstep_varnum + 1
502  endnum = numvars
503 
504  stime_index = saved_tstep
505  else
506  startnum = 1
507  endnum = numvars
508 
509  if ( save_tstepnum < 2 ) then
510  checked_tstepnum = 1
511  saved_time(checked_tstepnum) = time
512 
513  saved_tstep = checked_tstepnum
514  stime_index = saved_tstep
515 
516  elseif ( .not. checked_tstepnum < save_tstepnum ) then
517  create_timing_vars(:,1:checked_tstepnum-1) = create_timing_vars(:,2:checked_tstepnum)
518  close_timing_vars(:,1:checked_tstepnum-1) = close_timing_vars(:,2:checked_tstepnum)
519  renew_timing_vars(:,1:checked_tstepnum-1) = renew_timing_vars(:,2:checked_tstepnum)
520  output_timing_vars(:,1:checked_tstepnum-1) = output_timing_vars(:,2:checked_tstepnum)
521  output_timing_avr_vars(:,1:checked_tstepnum-1) = output_timing_avr_vars(:,2:checked_tstepnum)
522 
523  saved_time(1:checked_tstepnum-1) = saved_time(2:checked_tstepnum)
524  saved_time(checked_tstepnum) = time
525 
526  saved_tstep = checked_tstepnum
527  stime_index = saved_tstep
528 
529  else
530  checked_tstepnum = checked_tstepnum + 1
531  saved_time(checked_tstepnum) = time
532 
533  saved_tstep = checked_tstepnum
534  stime_index = saved_tstep
535  end if
536  end if
537 
538  call dbgmessage( 'numvar=<%d:%d> in saved_tstep=<%d> will be checked from now.', &
539  & i =(/ startnum, endnum, saved_tstep /) )
540 
541 
542  ! それぞれのタイミングをチェックして各変数に格納
543  !
544  ! * ファイルオープン: create_timing_vars
545  ! * ファイルクローズ: close_timing_vars
546  ! * ファイルクローズ/作成: renew_timing_vars
547  ! * データ出力: output_timing_vars
548  ! * データ平均化: output_avr_timing_vars
549 
550  create_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
551  close_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
552  renew_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
553  output_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
554  output_timing_avr_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
555 
556  do i = startnum, endnum
557 
558  if ( .not. output_valid_vars(i) ) cycle
559 
560  if ( origin_time_vars(i) > time ) cycle
561 
562  if ( origin_time_vars(i) <= time &
563  & .and. ( terminus_time_vars(i) < zero_time &
564  & .or. terminus_time_vars(i) >= time ) &
565  & .and. .not. histaddvar_vars(i) ) then
566 
567  create_timing_vars(i,checked_tstepnum) = .true.
568 
569  if ( newfile_inttime_vars(i) > zero_time ) then
570  newfile_createtime_vars(i) = time
571  end if
572 
573  output_timing_vars(i,checked_tstepnum) = .true.
574  output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
575  cycle
576  end if
577 
578  if ( terminus_time_vars(i) > zero_time .and. terminus_time_vars(i) < time ) then
579  close_timing_vars(i,checked_tstepnum) = .true.
580  output_timing_vars(i,checked_tstepnum) = .false.
581  output_timing_avr_vars(i,checked_tstepnum) = .false.
582  cycle
583  end if
584 
585  ! * newfile_inttime_vars だけでは, ぴったり一致しないとうまく行かない.
586  ! * そこで...
587  ! * 前回に出力した時刻を記憶しておく.
588  ! * 前回の時刻と今回の時刻の差が newfile_inttime_vars
589  ! よりも大きい場合には現ファイルを閉じ, 新ファイルを作成する.
590 
591  if ( newfile_inttime_vars(i) > zero_time ) then
592  if ( time - newfile_createtime_vars(i) >= newfile_inttime_vars(i) ) then
593  renew_timing_vars(i,checked_tstepnum) = .true.
594 
595  output_timing_vars(i,checked_tstepnum) = .true.
596  output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
597 
598  cycle
599  end if
600  end if
601 
602  if ( time - prev_outtime_vars(i) >= interval_time_vars(i) ) then
603  output_timing_vars(i,checked_tstepnum) = .true.
604  output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
605  cycle
606  end if
607 
608  output_timing_vars(i,checked_tstepnum) = .false.
609  output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
610 
611  end do
612 
613  checked_tstep_varnum = numvars
614 
615 999 continue
616  call storeerror(stat, subname, cause_c = cause_c)
617  call endsub(subname)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine historyclose(history, quiet, err)
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
integer, save, private i
Definition: dcunits_com.f90:42
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446

The documentation for this interface was generated from the following file: