184 integer,
save,
public ::
dbg = -1
193 & called_subname_tmp(:)
197 character(1),
parameter::
head =
'#' 209 integer function sublevel()
result(result)
232 logical,
intent(in):: on
233 integer,
save:: saved_dbg = -1
244 inquire(unit=
dbg, exist=x, opened=p)
246 if (x .and. .not. p)
then 252 open(unit=
dbg, status=
'SCRATCH')
267 if (saved_dbg < 0)
return 274 read(
dbg,
'(A)', iostat=ios) line
277 write(saved_dbg,
'(A)', iostat=ios) trim(line)
281 close(
dbg, iostat=ios)
310 integer,
intent(in),
optional:: debug
313 if (
present(
debug))
then 316 write(
dbg,
"(A, 'SetDebug: dbg =', i4)", iostat=ios) &
322 write(
dbg,
"(A, 'SetDebug: dbg = ', I0)", iostat=ios) trim(
head),
dbg 326 write(
dbg,
"(A, 'SetDebug: dbg = ', I0)", iostat=ios) trim(
head),
dbg 339 logical,
intent(out):: dbg_mode
349 subroutine beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, &
384 character(*),
intent(in) :: name
385 character(*),
intent(in),
optional:: fmt
386 integer,
intent(in),
optional:: i(:), n(:)
387 real,
intent(in),
optional:: r(:)
388 real(DP),
intent(in),
optional:: d(:)
389 logical,
intent(in),
optional:: L(:)
390 character(*),
intent(in),
optional:: c1, c2, c3
391 character(*),
intent(in),
optional:: ca(:)
392 character(*),
intent(in),
optional:: version
393 character(STRING) :: cbuf
394 character(STRING) :: name_ver
395 logical :: dbg_mode, print_version
396 integer :: alloc_size
398 if (
dbg < 0 )
return 400 call debug( dbg_mode )
403 print_version = .false.
406 if (
present(version))
then 410 print_version = .true.
421 print_version = .true.
424 if (print_version)
then 425 name_ver =
cprintf(
'%c version=<%c>', &
426 & c1=trim(name), c2=trim(version))
431 if (
present(fmt))
then 432 cbuf =
cprintf(fmt, i, r, d, l, n, c1, c2, c3, ca)
433 write(
dbg,
"(A, A, 'call ', A, ' : ', A)") trim(
head), &
434 & repeat(
indent,
level), trim(name_ver), trim(cbuf)
436 write(
dbg,
"(A, A, 'call ',A)") trim(
head), &
445 subroutine endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
473 character(*),
intent(in) :: name
474 character(*),
intent(in),
optional:: fmt
475 integer,
intent(in),
optional:: i(:), n(:)
476 real,
intent(in),
optional:: r(:)
477 real(DP),
intent(in),
optional:: d(:)
478 logical,
intent(in),
optional:: L(:)
479 character(*),
intent(in),
optional:: c1, c2, c3
480 character(*),
intent(in),
optional:: ca(:)
481 character(STRING):: cbuf
484 if (
dbg < 0 )
return 488 write(*,
"(A, 'Warning EndSub[',A,'] without BeginSub')") &
489 & trim(
head), trim(name)
491 write(*,
"(A, 'Warning EndSub[',A,'] but tos[',A,']')") &
496 call debug( debug_mode )
497 if ( debug_mode )
then 498 if (
present(fmt))
then 499 cbuf =
cprintf(fmt, i, r, d, l, n, c1, c2, c3, ca)
500 write(
dbg,
"(A, A, 'end ', A, ' : ', A)") trim(
head), &
503 write(
dbg,
"(A, A, 'end ', A)") trim(
head), &
508 subroutine dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
527 character(*),
intent(in) :: fmt
528 integer,
intent(in),
optional:: i(:), n(:)
529 real,
intent(in),
optional:: r(:)
530 real(DP),
intent(in),
optional:: d(:)
531 logical,
intent(in),
optional:: L(:)
532 character(*),
intent(in),
optional:: c1, c2, c3
533 character(*),
intent(in),
optional:: ca(:)
534 character(STRING):: cbuf
535 character(STRING):: meshead_tmp
536 integer :: meshead_len
538 if (
dbg < 0 )
return 539 cbuf =
cprintf(fmt, i, r, d, l, n, c1, c2, c3, ca)
547 write(
dbg,
"(A, A, A, A)") &
549 & meshead_tmp(1:meshead_len), trim(cbuf)
551 subroutine datad1dump(header, d, strlen, multi)
573 character(*),
intent(in) :: header
574 real(DP),
intent(in) :: d(:)
575 integer,
intent(in),
optional:: strlen
576 integer,
intent(in),
optional:: multi(:)
578 character(STRING):: unit
579 character(STRING):: unitbuf
581 character(STRING):: cbuf
586 character(STRING):: cmulti
587 character(STRING):: cout
588 character(STRING):: meshead_tmp
589 integer :: meshead_len
591 if (
dbg < 0 )
return 608 if (
present(multi))
then 609 do j = 1,
size(multi)
610 cmulti = trim(cmulti) //
', ' // trim(
tochar( multi(j) ) )
615 if (first) begini = i
617 write(cbuf,
"(g40.20)") d(i)
618 if (.not. first) cbuf =
', ' // adjustl(cbuf)
620 call append(unit, ucur, trim(adjustl(cbuf)), stat, strlen)
621 if ( stat /= 0 .or. i ==
size( d(:) ) )
then 624 cout = header //
'(' &
625 & // trim(tochar(begini)) &
627 & //
')=' // trim(unit)
629 elseif (stat /= 0 .and. begini == endi-1)
then 630 cout = header //
'(' &
631 & // trim(tochar(begini)) &
633 & //
')='// trim(unitbuf)
636 elseif (stat /= 0 .and. begini /= endi-1)
then 637 cout = header //
'(' &
638 & // trim(tochar(begini)) //
'-' &
639 & // trim(tochar(endi-1)) &
641 & //
')=' // trim(unitbuf)
645 elseif ( i ==
size( d(:) ) )
then 646 cout = header //
'(' &
647 & // trim(tochar(begini)) //
'-' &
648 & // trim(tochar(endi)) &
650 & //
')='// trim(unit)
652 write(
dbg,
"(A, A, A, A)") &
654 & meshead_tmp(1:meshead_len), trim(cout)
663 if (i ==
size( d(:) ) )
exit dim_1_loop
667 subroutine datad2dump(header, d, strlen, multi)
674 character(*),
intent(in) :: header
675 real(DP),
intent(in) :: d(:,:)
676 integer,
intent(in),
optional:: strlen
677 integer,
intent(in),
optional:: multi(:)
678 integer,
allocatable :: total(:)
681 if (
dbg < 0 )
return 682 if (
present(multi))
then 683 allocate( total(
size(multi)+1) )
684 total(2:
size(multi)+1) = multi(:)
688 do j = 1,
size( d(:,:), 2 )
690 call datadump(header, d(:,j), strlen=strlen, multi=total(:))
694 subroutine datad3dump(header, d, strlen, multi)
701 character(*),
intent(in) :: header
702 real(DP),
intent(in) :: d(:,:,:)
703 integer,
intent(in),
optional:: strlen
704 integer,
intent(in),
optional:: multi(:)
705 integer,
allocatable :: total(:)
708 if (
dbg < 0 )
return 709 if (
present(multi))
then 710 allocate( total(
size(multi)+1) )
711 total(2:
size(multi)+1) = multi(:)
715 do k = 1,
size( d(:,:,:), 3 )
717 call datadump(header, d(:,:,k), strlen=strlen, multi=total(:))
721 subroutine append(unit, ucur, val, stat, strlen)
727 character(*),
intent(inout):: unit
728 integer,
intent(inout):: ucur
729 character(*),
intent(in) :: val
730 integer,
intent(out) :: stat
731 integer,
intent(in), &
736 if (
present(strlen))
then 737 if (ucur >= strlen)
then 742 if (ucur >= len(unit))
then 749 wrsz = min(len(val), len(unit) - ucur)
750 unit(1+ucur: wrsz+ucur) = val(1: wrsz)
753 if (wrsz < len(val)) stat = 1
subroutine, public dbg_scratch(on)
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
subroutine, public setdebug(debug)
character(2), parameter meshead
integer, save, public dbg
subroutine datad3dump(header, d, strlen, multi)
character(string), dimension(:), allocatable, save called_subname_tmp
integer, parameter trace_stack_size
character(token), dimension(trace_stack_size), save table
integer function, public sublevel()
subroutine datad2dump(header, d, strlen, multi)
integer, parameter, public stderr
標準エラー出力の装置番号
integer, parameter, public dp
倍精度実数型変数
character(1), parameter head
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
subroutine dctracedebug(dbg_mode)
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
character(string), dimension(:), allocatable, save called_subname
integer, parameter, public stdout
標準出力の装置番号
subroutine datad1dump(header, d, strlen, multi)
character(2), parameter indent
subroutine append(unit, ucur, val, stat, strlen)
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ