gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
Public Member Functions | List of all members
gtool_historyauto_internal::hstvarsoutputcheck Interface Reference

Public Member Functions

subroutine hstvarsoutputcheck (time, stime_index)
 

Detailed Description

Definition at line 336 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 
)

Check output timing for each variable.

It is investigated whether time is output timing for each variable, and the information is reflected to output_timing_vars, output_timing_avr_vars, create_timing_vars, close_timing_vars, renew_timing_vars. And index of array saved_time is returned to stime_index.

And if current time is timing of open/close of files, they are done in this subroutine.

Parameters
[in]timeCurrent time.
[out]stime_indexIndex of saved_time array.

Definition at line 449 of file gtool_historyauto_internal.f90.

451 use dc_error, only: storeerror, dc_noerr
452 use gtool_history, only: historyinitialized, historyclose
453 use dc_date_types, only: dc_difftime
454 use dc_date, only: operator(==), operator(>), operator(<), &
455 & operator(>=), operator(<=), operator(-), dcdifftimeputline, &
456 & evalsec
457 implicit none
458 real(DP), intent(in):: time
459 ! 現在時刻. Current time
460 integer, intent(out):: stime_index
461
462 integer:: tstep
463 integer:: stat, i, startnum, endnum
464 character(STRING):: cause_c
465 character(*), parameter:: subname = "HstVarsOutputCheck"
466 real(DP), parameter:: time_eps = epsilon(1.0_dp)
467 continue
468 call beginsub(subname)
469 stat = dc_noerr
470 cause_c = ""
471
472 ! 与えられた時刻がチェック済みかどうかを調べる
473 ! Examine whether given time is already checked or not
474 !
475 timestepsearch: do
476 do i = saved_tstep, checked_tstepnum
477 if ( abs(saved_time(i) - time) <= &
478 & time_eps * max(1.0_dp, abs(time), abs(saved_time(i))) ) then
479 tstep = i
480 exit timestepsearch
481 end if
482 end do
483 do i = 1, saved_tstep - 1
484 if ( abs(saved_time(i) - time) <= &
485 & time_eps * max(1.0_dp, abs(time), abs(saved_time(i))) ) then
486 tstep = i
487 exit timestepsearch
488 end if
489 end do
490
491 tstep = 0
492 exit timestepsearch
493 end do timestepsearch
494
495 saved_tstep = tstep
496
497 if ( saved_tstep /= 0 .and. checked_tstep_varnum == numvars ) then
498 ! * output_timing_vars(:,saved_tstep) を使う.
499 ! * saved_tstep を stime_index として返す.
500
501 stime_index = saved_tstep
502 call dbgmessage( 'saved_tstep=<%d> is already checked.', &
503 & i =(/ saved_tstep /) )
504 goto 999
505 end if
506
507 ! チェックする時間ステップと, 変数 ID の設定
508 ! Configure checked time step, and variable ID
509 !
510 if ( saved_tstep /= 0 ) then
511 startnum = checked_tstep_varnum + 1
512 endnum = numvars
513
514 stime_index = saved_tstep
515 else
516 startnum = 1
517 endnum = numvars
518
519 if ( save_tstepnum < 2 ) then
520 checked_tstepnum = 1
521 saved_time(checked_tstepnum) = time
522
523 saved_tstep = checked_tstepnum
524 stime_index = saved_tstep
525
526 elseif ( .not. checked_tstepnum < save_tstepnum ) then
527 create_timing_vars(:,1:checked_tstepnum-1) = create_timing_vars(:,2:checked_tstepnum)
528 close_timing_vars(:,1:checked_tstepnum-1) = close_timing_vars(:,2:checked_tstepnum)
529 renew_timing_vars(:,1:checked_tstepnum-1) = renew_timing_vars(:,2:checked_tstepnum)
530 output_timing_vars(:,1:checked_tstepnum-1) = output_timing_vars(:,2:checked_tstepnum)
531 output_timing_avr_vars(:,1:checked_tstepnum-1) = output_timing_avr_vars(:,2:checked_tstepnum)
532
533 saved_time(1:checked_tstepnum-1) = saved_time(2:checked_tstepnum)
534 saved_time(checked_tstepnum) = time
535
536 saved_tstep = checked_tstepnum
537 stime_index = saved_tstep
538
539 else
540 checked_tstepnum = checked_tstepnum + 1
541 saved_time(checked_tstepnum) = time
542
543 saved_tstep = checked_tstepnum
544 stime_index = saved_tstep
545 end if
546 end if
547
548 call dbgmessage( 'numvar=<%d:%d> in saved_tstep=<%d> will be checked from now.', &
549 & i =(/ startnum, endnum, saved_tstep /) )
550
551
552 ! それぞれのタイミングをチェックして各変数に格納
553 !
554 ! * ファイルオープン: create_timing_vars
555 ! * ファイルクローズ: close_timing_vars
556 ! * ファイルクローズ/作成: renew_timing_vars
557 ! * データ出力: output_timing_vars
558 ! * データ平均化: output_avr_timing_vars
559
560 create_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
561 close_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
562 renew_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
563 output_timing_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
564 output_timing_avr_vars(startnum:endnum, checked_tstepnum:checked_tstepnum) = .false.
565
566 do i = startnum, endnum
567
568 if ( .not. output_valid_vars(i) ) cycle
569
570 if ( origin_time_vars(i) > time ) cycle
571
572 if ( origin_time_vars(i) <= time &
573 & .and. ( terminus_time_vars(i) < zero_time &
574 & .or. terminus_time_vars(i) >= time ) &
575 & .and. .not. histaddvar_vars(i) ) then
576
577 create_timing_vars(i,checked_tstepnum) = .true.
578
579 if ( newfile_inttime_vars(i) > zero_time ) then
580 newfile_createtime_vars(i) = time
581 end if
582
583 output_timing_vars(i,checked_tstepnum) = .true.
584 output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
585 cycle
586 end if
587
588 if ( terminus_time_vars(i) > zero_time .and. terminus_time_vars(i) < time ) then
589 close_timing_vars(i,checked_tstepnum) = .true.
590 output_timing_vars(i,checked_tstepnum) = .false.
591 output_timing_avr_vars(i,checked_tstepnum) = .false.
592 cycle
593 end if
594
595 ! * newfile_inttime_vars だけでは, ぴったり一致しないとうまく行かない.
596 ! * そこで...
597 ! * 前回に出力した時刻を記憶しておく.
598 ! * 前回の時刻と今回の時刻の差が newfile_inttime_vars
599 ! よりも大きい場合には現ファイルを閉じ, 新ファイルを作成する.
600
601 if ( newfile_inttime_vars(i) > zero_time ) then
602 if ( time - newfile_createtime_vars(i) >= newfile_inttime_vars(i) ) then
603 renew_timing_vars(i,checked_tstepnum) = .true.
604
605 output_timing_vars(i,checked_tstepnum) = .true.
606 output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
607
608 cycle
609 end if
610 end if
611
612 if ( time - prev_outtime_vars(i) >= interval_time_vars(i) ) then
613 output_timing_vars(i,checked_tstepnum) = .true.
614 output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
615 cycle
616 end if
617
618 output_timing_vars(i,checked_tstepnum) = .false.
619 output_timing_avr_vars(i,checked_tstepnum) = tavr_vars(i)
620
621 end do
622
623 checked_tstep_varnum = numvars
624
625999 continue
626 call storeerror(stat, subname, cause_c = cause_c)
627 call endsub(subname)
subroutine dcdifftimeputline(diff, unit, indent)
subroutine historyclose(history, quiet, err)
Derived types and parameters for date and time.
Date and time manipulation module.
Definition dc_date.f90:57
Error handling module.
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public dc_noerr
Error storage variables
Definition dc_error.f90:468
Debug tracing module.
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:661
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:457
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:580

References dc_trace::beginsub(), gtool_historyauto_internal::checked_tstep_varnum, gtool_historyauto_internal::checked_tstepnum, gtool_historyauto_internal::close_timing_vars, gtool_historyauto_internal::create_timing_vars, dc_trace::dbgmessage(), dc_error::dc_noerr, dcdifftimeputline(), dc_trace::endsub(), gtool_historyauto_internal::histaddvar_vars, historyclose(), gtool_historyauto_internal::interval_time_vars, gtool_historyauto_internal::newfile_createtime_vars, gtool_historyauto_internal::newfile_inttime_vars, gtool_historyauto_internal::numvars, gtool_historyauto_internal::origin_time_vars, gtool_historyauto_internal::output_timing_avr_vars, gtool_historyauto_internal::output_timing_vars, gtool_historyauto_internal::output_valid_vars, gtool_historyauto_internal::prev_outtime_vars, gtool_historyauto_internal::renew_timing_vars, gtool_historyauto_internal::save_tstepnum, gtool_historyauto_internal::saved_time, gtool_historyauto_internal::saved_tstep, dc_error::storeerror(), gtool_historyauto_internal::tavr_vars, gtool_historyauto_internal::terminus_time_vars, and gtool_historyauto_internal::zero_time.

Here is the call graph for this function:

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