!-- ! *** Caution!! *** ! ! This file is generated from "dc_test.rb2f90" by Ruby 1.8.2. ! Please do not edit this file directly. ! ! [JAPANESE] ! ! ※※※ 注意!!! ※※※ ! ! このファイルは "dc_test.rb2f90" から Ruby 1.8.2 ! によって自動生成されたファイルです. ! このファイルを直接編集しませんようお願い致します. ! ! !++ ! !== Test module ! ! Authors:: Yasuhiro MORIKAWA ! Version:: $Id: dc_test.f90,v 1.5 2006/06/07 15:46:13 morikawa Exp $ ! Tag Name:: $Name: gt4f90io-20060627 $ ! Copyright:: Copyright (C) GFD Dennou Club, 2005. All rights reserved. ! License:: See COPYRIGHT[link:../../COPYRIGHT] ! ! This file provides dc_test ! module dc_test,41 ! !== Overview ! ! Fortran 90/95 におけるテストプログラム作成を補助するための ! モジュールです. ! !== List ! ! Verify :: 正答とチェックすべき値とを照合する. ! !== Usage ! ! Verify サブルーチンは以下のように用います. ! *answer* に正答を与え, *check* に照合すべき値を与えます. ! *answer* と *check* には全ての組み込み型の変数および ! 配列 (1 〜 7次元) を与えることができますが, ! 2 つの引数の型および次元数は一致している必要があります. ! ! call Verify('Title', answer='foo', check=str1) ! ! もしも *answer* と *check* の値, もしくは配列のサイズが異なる場合, ! テストプログラムはエラーを返して終了します. ! !=== 具体例 ! ! 具体例は以下の通りです. ! ! use dc_types ! use dc_test ! character(STRING):: str1 ! integer:: int1 ! real:: numr1(2) ! real(DP):: numd1(2,3) ! logical:: y_n ! ! str1 = "foo" ! call Verify('Character', answer='foo', check=str1) ! int1 = 1 ! call Verify('Integer', answer=1, check=int1) ! numr1(:) = (/0.00123, 0.2/) ! call Verify('Float', answer=(/0.00123, 0.2/), check=numr1) ! y_n = .true. ! call Verify('Logical', answer=.true., check=y_n) ! numd1(1,:) = (/19.432d0, 75.3d0, 3.183d0/) ! numd1(2,:) = (/0.023d0, 0.9d0, 328.2d0/) ! call Verify('Double precision 1', & ! & answer=(/19.432d0, 75.3d0, 3.183d0/), check=numd1(1,:)) ! call Verify('Double precision 2', & ! & answer=(/0.023d0, 0.9d0, 238.5d0/), check=numd1(2,:)) ! end ! ! ! 上記の例では, 最後のテストで敢えて間違った answer を与えているので, ! 以下のようなメッセージを出力してプログラムは強制終了します. ! ! *** MESSAGE [DCVerify] *** Checking Character OK ! *** MESSAGE [DCVerify] *** Checking Integer OK ! *** MESSAGE [DCVerify] *** Checking Float OK ! *** MESSAGE [DCVerify] *** Checking Logical OK ! *** MESSAGE [DCVerify] *** Checking Double precision 1 OK ! *** Error [DCVerify] *** Checking Double precision 2 FAILURE ! ! check(3) = 328.2 ! is INCORRECT ! Correct answer is answer(3) = 238.5 ! ! use dc_types, only : STRING, DP implicit none private public Verify interface Verify module procedure DCVerifyChar0 module procedure DCVerifyChar1 module procedure DCVerifyChar2 module procedure DCVerifyChar3 module procedure DCVerifyChar4 module procedure DCVerifyChar5 module procedure DCVerifyChar6 module procedure DCVerifyChar7 module procedure DCVerifyInt0 module procedure DCVerifyInt1 module procedure DCVerifyInt2 module procedure DCVerifyInt3 module procedure DCVerifyInt4 module procedure DCVerifyInt5 module procedure DCVerifyInt6 module procedure DCVerifyInt7 module procedure DCVerifyReal0 module procedure DCVerifyReal1 module procedure DCVerifyReal2 module procedure DCVerifyReal3 module procedure DCVerifyReal4 module procedure DCVerifyReal5 module procedure DCVerifyReal6 module procedure DCVerifyReal7 module procedure DCVerifyDouble0 module procedure DCVerifyDouble1 module procedure DCVerifyDouble2 module procedure DCVerifyDouble3 module procedure DCVerifyDouble4 module procedure DCVerifyDouble5 module procedure DCVerifyDouble6 module procedure DCVerifyDouble7 module procedure DCVerifyLogical0 module procedure DCVerifyLogical1 module procedure DCVerifyLogical2 module procedure DCVerifyLogical3 module procedure DCVerifyLogical4 module procedure DCVerifyLogical5 module procedure DCVerifyLogical6 module procedure DCVerifyLogical7 end interface contains subroutine DCVerifyChar0(item, answer, check) 2,3 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer character(*), intent(in):: check logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right continue err_flag = .false. err_flag = .not. trim(answer) == trim(check) wrong = check right = answer pos_str = '' if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar0 subroutine DCVerifyChar1(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:) character(*), intent(in):: check(:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(1), check_shape(1), pos(1) logical :: consist_shape(1) character(TOKEN) :: pos_array(1) integer, allocatable :: mask_array(:) logical, allocatable :: judge(:) logical, allocatable :: judge_rev(:) character(STRING), allocatable :: answer_fixed_length(:) character(STRING), allocatable :: check_fixed_length(:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1) ) & & ) allocate( judge (& & answer_shape(1) ) & & ) allocate( judge_rev (& & answer_shape(1) ) & & ) allocate( answer_fixed_length (& & answer_shape(1) ) & & ) allocate( check_fixed_length (& & check_shape(1) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1) ) right = answer (& & pos(1) ) write(unit=pos_array(1), fmt="(i20)") pos(1) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar1 subroutine DCVerifyChar2(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:) character(*), intent(in):: check(:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(2), check_shape(2), pos(2) logical :: consist_shape(2) character(TOKEN) :: pos_array(2) integer, allocatable :: mask_array(:,:) logical, allocatable :: judge(:,:) logical, allocatable :: judge_rev(:,:) character(STRING), allocatable :: answer_fixed_length(:,:) character(STRING), allocatable :: check_fixed_length(:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2) ) right = answer (& & pos(1), & & pos(2) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar2 subroutine DCVerifyChar3(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:,:) character(*), intent(in):: check(:,:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(3), check_shape(3), pos(3) logical :: consist_shape(3) character(TOKEN) :: pos_array(3) integer, allocatable :: mask_array(:,:,:) logical, allocatable :: judge(:,:,:) logical, allocatable :: judge_rev(:,:,:) character(STRING), allocatable :: answer_fixed_length(:,:,:) character(STRING), allocatable :: check_fixed_length(:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2), & & check_shape(3) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3) ) right = answer (& & pos(1), & & pos(2), & & pos(3) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar3 subroutine DCVerifyChar4(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:,:,:) character(*), intent(in):: check(:,:,:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(4), check_shape(4), pos(4) logical :: consist_shape(4) character(TOKEN) :: pos_array(4) integer, allocatable :: mask_array(:,:,:,:) logical, allocatable :: judge(:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:) character(STRING), allocatable :: answer_fixed_length(:,:,:,:) character(STRING), allocatable :: check_fixed_length(:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar4 subroutine DCVerifyChar5(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:,:,:,:) character(*), intent(in):: check(:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(5), check_shape(5), pos(5) logical :: consist_shape(5) character(TOKEN) :: pos_array(5) integer, allocatable :: mask_array(:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:) character(STRING), allocatable :: answer_fixed_length(:,:,:,:,:) character(STRING), allocatable :: check_fixed_length(:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar5 subroutine DCVerifyChar6(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:,:,:,:,:) character(*), intent(in):: check(:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(6), check_shape(6), pos(6) logical :: consist_shape(6) character(TOKEN) :: pos_array(6) integer, allocatable :: mask_array(:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:) character(STRING), allocatable :: answer_fixed_length(:,:,:,:,:,:) character(STRING), allocatable :: check_fixed_length(:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5), & & check_shape(6) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar6 subroutine DCVerifyChar7(item, answer, check) 2,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item character(*), intent(in):: answer(:,:,:,:,:,:,:) character(*), intent(in):: check(:,:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str character(STRING) :: wrong, right integer :: answer_shape(7), check_shape(7), pos(7) logical :: consist_shape(7) character(TOKEN) :: pos_array(7) integer, allocatable :: mask_array(:,:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:,:) character(STRING), allocatable :: answer_fixed_length(:,:,:,:,:,:,:) character(STRING), allocatable :: check_fixed_length(:,:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( answer_fixed_length (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( check_fixed_length (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5), & & check_shape(6), & & check_shape(7) ) & & ) answer_fixed_length = answer check_fixed_length = check judge = answer_fixed_length == check_fixed_length deallocate(answer_fixed_length, check_fixed_length) judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) write(unit=pos_array(7), fmt="(i20)") pos(7) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ',' // & & trim(adjustl(pos_array(7))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', trim(wrong) write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', trim(right) call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyChar7 subroutine DCVerifyInt0(item, answer, check) 1,3 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer integer, intent(in):: check logical :: err_flag character(STRING) :: pos_str integer :: wrong, right continue err_flag = .false. err_flag = .not. answer == check wrong = check right = answer pos_str = '' if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt0 subroutine DCVerifyInt1(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:) integer, intent(in):: check(:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(1), check_shape(1), pos(1) logical :: consist_shape(1) character(TOKEN) :: pos_array(1) integer, allocatable :: mask_array(:) logical, allocatable :: judge(:) logical, allocatable :: judge_rev(:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1) ) & & ) allocate( judge (& & answer_shape(1) ) & & ) allocate( judge_rev (& & answer_shape(1) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1) ) right = answer (& & pos(1) ) write(unit=pos_array(1), fmt="(i20)") pos(1) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt1 subroutine DCVerifyInt2(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:) integer, intent(in):: check(:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(2), check_shape(2), pos(2) logical :: consist_shape(2) character(TOKEN) :: pos_array(2) integer, allocatable :: mask_array(:,:) logical, allocatable :: judge(:,:) logical, allocatable :: judge_rev(:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2) ) right = answer (& & pos(1), & & pos(2) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt2 subroutine DCVerifyInt3(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:,:) integer, intent(in):: check(:,:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(3), check_shape(3), pos(3) logical :: consist_shape(3) character(TOKEN) :: pos_array(3) integer, allocatable :: mask_array(:,:,:) logical, allocatable :: judge(:,:,:) logical, allocatable :: judge_rev(:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3) ) right = answer (& & pos(1), & & pos(2), & & pos(3) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt3 subroutine DCVerifyInt4(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:,:,:) integer, intent(in):: check(:,:,:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(4), check_shape(4), pos(4) logical :: consist_shape(4) character(TOKEN) :: pos_array(4) integer, allocatable :: mask_array(:,:,:,:) logical, allocatable :: judge(:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt4 subroutine DCVerifyInt5(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:,:,:,:) integer, intent(in):: check(:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(5), check_shape(5), pos(5) logical :: consist_shape(5) character(TOKEN) :: pos_array(5) integer, allocatable :: mask_array(:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt5 subroutine DCVerifyInt6(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:,:,:,:,:) integer, intent(in):: check(:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(6), check_shape(6), pos(6) logical :: consist_shape(6) character(TOKEN) :: pos_array(6) integer, allocatable :: mask_array(:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt6 subroutine DCVerifyInt7(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item integer, intent(in):: answer(:,:,:,:,:,:,:) integer, intent(in):: check(:,:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str integer :: wrong, right integer :: answer_shape(7), check_shape(7), pos(7) logical :: consist_shape(7) character(TOKEN) :: pos_array(7) integer, allocatable :: mask_array(:,:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) write(unit=pos_array(7), fmt="(i20)") pos(7) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ',' // & & trim(adjustl(pos_array(7))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyInt7 subroutine DCVerifyReal0(item, answer, check) 1,3 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer real, intent(in):: check logical :: err_flag character(STRING) :: pos_str real :: wrong, right continue err_flag = .false. err_flag = .not. answer == check wrong = check right = answer pos_str = '' if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal0 subroutine DCVerifyReal1(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:) real, intent(in):: check(:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(1), check_shape(1), pos(1) logical :: consist_shape(1) character(TOKEN) :: pos_array(1) integer, allocatable :: mask_array(:) logical, allocatable :: judge(:) logical, allocatable :: judge_rev(:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1) ) & & ) allocate( judge (& & answer_shape(1) ) & & ) allocate( judge_rev (& & answer_shape(1) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1) ) right = answer (& & pos(1) ) write(unit=pos_array(1), fmt="(i20)") pos(1) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal1 subroutine DCVerifyReal2(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:) real, intent(in):: check(:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(2), check_shape(2), pos(2) logical :: consist_shape(2) character(TOKEN) :: pos_array(2) integer, allocatable :: mask_array(:,:) logical, allocatable :: judge(:,:) logical, allocatable :: judge_rev(:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2) ) right = answer (& & pos(1), & & pos(2) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal2 subroutine DCVerifyReal3(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:,:) real, intent(in):: check(:,:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(3), check_shape(3), pos(3) logical :: consist_shape(3) character(TOKEN) :: pos_array(3) integer, allocatable :: mask_array(:,:,:) logical, allocatable :: judge(:,:,:) logical, allocatable :: judge_rev(:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3) ) right = answer (& & pos(1), & & pos(2), & & pos(3) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal3 subroutine DCVerifyReal4(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:,:,:) real, intent(in):: check(:,:,:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(4), check_shape(4), pos(4) logical :: consist_shape(4) character(TOKEN) :: pos_array(4) integer, allocatable :: mask_array(:,:,:,:) logical, allocatable :: judge(:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal4 subroutine DCVerifyReal5(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:,:,:,:) real, intent(in):: check(:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(5), check_shape(5), pos(5) logical :: consist_shape(5) character(TOKEN) :: pos_array(5) integer, allocatable :: mask_array(:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal5 subroutine DCVerifyReal6(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:,:,:,:,:) real, intent(in):: check(:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(6), check_shape(6), pos(6) logical :: consist_shape(6) character(TOKEN) :: pos_array(6) integer, allocatable :: mask_array(:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal6 subroutine DCVerifyReal7(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real, intent(in):: answer(:,:,:,:,:,:,:) real, intent(in):: check(:,:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real :: wrong, right integer :: answer_shape(7), check_shape(7), pos(7) logical :: consist_shape(7) character(TOKEN) :: pos_array(7) integer, allocatable :: mask_array(:,:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) write(unit=pos_array(7), fmt="(i20)") pos(7) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ',' // & & trim(adjustl(pos_array(7))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyReal7 subroutine DCVerifyDouble0(item, answer, check) 1,3 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer real(DP), intent(in):: check logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right continue err_flag = .false. err_flag = .not. answer == check wrong = check right = answer pos_str = '' if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble0 subroutine DCVerifyDouble1(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:) real(DP), intent(in):: check(:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(1), check_shape(1), pos(1) logical :: consist_shape(1) character(TOKEN) :: pos_array(1) integer, allocatable :: mask_array(:) logical, allocatable :: judge(:) logical, allocatable :: judge_rev(:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1) ) & & ) allocate( judge (& & answer_shape(1) ) & & ) allocate( judge_rev (& & answer_shape(1) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1) ) right = answer (& & pos(1) ) write(unit=pos_array(1), fmt="(i20)") pos(1) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble1 subroutine DCVerifyDouble2(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:) real(DP), intent(in):: check(:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(2), check_shape(2), pos(2) logical :: consist_shape(2) character(TOKEN) :: pos_array(2) integer, allocatable :: mask_array(:,:) logical, allocatable :: judge(:,:) logical, allocatable :: judge_rev(:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2) ) right = answer (& & pos(1), & & pos(2) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble2 subroutine DCVerifyDouble3(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:,:) real(DP), intent(in):: check(:,:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(3), check_shape(3), pos(3) logical :: consist_shape(3) character(TOKEN) :: pos_array(3) integer, allocatable :: mask_array(:,:,:) logical, allocatable :: judge(:,:,:) logical, allocatable :: judge_rev(:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3) ) right = answer (& & pos(1), & & pos(2), & & pos(3) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble3 subroutine DCVerifyDouble4(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:,:,:) real(DP), intent(in):: check(:,:,:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(4), check_shape(4), pos(4) logical :: consist_shape(4) character(TOKEN) :: pos_array(4) integer, allocatable :: mask_array(:,:,:,:) logical, allocatable :: judge(:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble4 subroutine DCVerifyDouble5(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:,:,:,:) real(DP), intent(in):: check(:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(5), check_shape(5), pos(5) logical :: consist_shape(5) character(TOKEN) :: pos_array(5) integer, allocatable :: mask_array(:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble5 subroutine DCVerifyDouble6(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:,:,:,:,:) real(DP), intent(in):: check(:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(6), check_shape(6), pos(6) logical :: consist_shape(6) character(TOKEN) :: pos_array(6) integer, allocatable :: mask_array(:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble6 subroutine DCVerifyDouble7(item, answer, check) 1,4 use sysdep, only: AbortProgram use dc_types, only: STRING, TOKEN implicit none character(*), intent(in):: item real(DP), intent(in):: answer(:,:,:,:,:,:,:) real(DP), intent(in):: check(:,:,:,:,:,:,:) logical :: err_flag character(STRING) :: pos_str real(DP) :: wrong, right integer :: answer_shape(7), check_shape(7), pos(7) logical :: consist_shape(7) character(TOKEN) :: pos_array(7) integer, allocatable :: mask_array(:,:,:,:,:,:,:) logical, allocatable :: judge(:,:,:,:,:,:,:) logical, allocatable :: judge_rev(:,:,:,:,:,:,:) continue err_flag = .false. answer_shape = shape(answer) check_shape = shape(check) consist_shape = answer_shape == check_shape if (.not. all(consist_shape)) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' shape of check is (', check_shape, ')' write(*,*) ' is INCORRECT' write(*,*) ' Correct shape of answer is (', answer_shape, ')' call AbortProgram('') end if allocate( mask_array (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( judge_rev (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) judge = answer == check judge_rev = .not. judge err_flag = any(judge_rev) mask_array = 1 pos = maxloc(mask_array, judge_rev) if (err_flag) then wrong = check (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) right = answer (& & pos(1), & & pos(2), & & pos(3), & & pos(4), & & pos(5), & & pos(6), & & pos(7) ) write(unit=pos_array(1), fmt="(i20)") pos(1) write(unit=pos_array(2), fmt="(i20)") pos(2) write(unit=pos_array(3), fmt="(i20)") pos(3) write(unit=pos_array(4), fmt="(i20)") pos(4) write(unit=pos_array(5), fmt="(i20)") pos(5) write(unit=pos_array(6), fmt="(i20)") pos(6) write(unit=pos_array(7), fmt="(i20)") pos(7) pos_str = '(' // & & trim(adjustl(pos_array(1))) // ',' // & & trim(adjustl(pos_array(2))) // ',' // & & trim(adjustl(pos_array(3))) // ',' // & & trim(adjustl(pos_array(4))) // ',' // & & trim(adjustl(pos_array(5))) // ',' // & & trim(adjustl(pos_array(6))) // ',' // & & trim(adjustl(pos_array(7))) // ')' end if deallocate(mask_array, judge, judge_rev) if (err_flag) then write(*,*) ' *** Error [DCVerify] *** Checking ' // trim(item) // ' FAILURE' write(*,*) '' write(*,*) ' check' // trim(pos_str) // ' = ', wrong write(*,*) ' is INCORRECT' write(*,*) ' Correct answer is answer' // trim(pos_str) // ' = ', right call AbortProgram('') else write(*,*) ' *** MESSAGE [DCVerify] *** Checking ' // trim(item) // ' OK' end if end subroutine DCVerifyDouble7 subroutine DCVerifyLogical0(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer logical, intent(in):: check character(STRING) :: answer_str character(STRING) :: check_str continue if (answer) then answer_str = ".true." else answer_str = ".false." end if if (check) then check_str = ".true." else check_str = ".false." end if call DCVerifyChar0(item, answer_str, check_str) end subroutine DCVerifyLogical0 subroutine DCVerifyLogical1(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:) logical, intent(in):: check(:) integer :: answer_shape(1), check_shape(1), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:) character(STRING), allocatable :: check_str(:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1) ) & & ) allocate( check_str (& & check_shape(1) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar1(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical1 subroutine DCVerifyLogical2(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:) logical, intent(in):: check(:,:) integer :: answer_shape(2), check_shape(2), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:) character(STRING), allocatable :: check_str(:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar2(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical2 subroutine DCVerifyLogical3(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:,:) logical, intent(in):: check(:,:,:) integer :: answer_shape(3), check_shape(3), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:,:) character(STRING), allocatable :: check_str(:,:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2), & & check_shape(3) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar3(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical3 subroutine DCVerifyLogical4(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:,:,:) logical, intent(in):: check(:,:,:,:) integer :: answer_shape(4), check_shape(4), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:,:,:) character(STRING), allocatable :: check_str(:,:,:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar4(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical4 subroutine DCVerifyLogical5(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:,:,:,:) logical, intent(in):: check(:,:,:,:,:) integer :: answer_shape(5), check_shape(5), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:,:,:,:) character(STRING), allocatable :: check_str(:,:,:,:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar5(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical5 subroutine DCVerifyLogical6(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:,:,:,:,:) logical, intent(in):: check(:,:,:,:,:,:) integer :: answer_shape(6), check_shape(6), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:,:,:,:,:) character(STRING), allocatable :: check_str(:,:,:,:,:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5), & & check_shape(6) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar6(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical6 subroutine DCVerifyLogical7(item, answer, check) 1,2 use dc_types, only: STRING implicit none character(*), intent(in):: item logical, intent(in):: answer(:,:,:,:,:,:,:) logical, intent(in):: check(:,:,:,:,:,:,:) integer :: answer_shape(7), check_shape(7), i logical, allocatable :: answer_tmp(:), check_tmp(:) character(STRING), allocatable :: answer_str_tmp(:), check_str_tmp(:) character(STRING), allocatable :: answer_str(:,:,:,:,:,:,:) character(STRING), allocatable :: check_str(:,:,:,:,:,:,:) continue allocate(answer_tmp(size(answer))) allocate(check_tmp(size(check))) allocate(answer_str_tmp(size(answer))) allocate(check_str_tmp(size(check))) answer_tmp = pack(answer, .true.) check_tmp = pack(check, .true.) do i = 1, size(answer_tmp) if (answer_tmp(i)) then answer_str_tmp(i) = '.true.' else answer_str_tmp(i) = '.false.' end if end do do i = 1, size(check_tmp) if (check_tmp(i)) then check_str_tmp(i) = '.true.' else check_str_tmp(i) = '.false.' end if end do answer_shape = shape(answer) check_shape = shape(check) allocate( answer_str (& & answer_shape(1), & & answer_shape(2), & & answer_shape(3), & & answer_shape(4), & & answer_shape(5), & & answer_shape(6), & & answer_shape(7) ) & & ) allocate( check_str (& & check_shape(1), & & check_shape(2), & & check_shape(3), & & check_shape(4), & & check_shape(5), & & check_shape(6), & & check_shape(7) ) & & ) answer_str = reshape(answer_str_tmp, answer_shape) check_str = reshape(check_str_tmp, check_shape) call DCVerifyChar7(item, answer_str, check_str) deallocate(answer_str, answer_tmp, answer_str_tmp) deallocate(check_str, check_tmp, check_str_tmp) end subroutine DCVerifyLogical7 end module dc_test !-- ! vi:set readonly sw=4 ts=8: ! !Local Variables: !mode: f90 !buffer-read-only: t !End: ! !++