LCOV - code coverage report
Current view: top level - physics/cam - cmparray_mod.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 61 70 87.1 %
Date: 2025-01-13 21:54:50 Functions: 12 15 80.0 %

          Line data    Source code
       1             : module cmparray_mod
       2             : 
       3             :   use shr_kind_mod, only : r8 => shr_kind_r8
       4             :   
       5             :   implicit none
       6             :   private
       7             :   save
       8             :   
       9             :   public expdaynite, cmpdaynite
      10             : 
      11             :   interface CmpDayNite
      12             :     module procedure CmpDayNite_1d_R
      13             :     module procedure CmpDayNite_2d_R
      14             :     module procedure CmpDayNite_3d_R
      15             :     module procedure CmpDayNite_1d_R_Copy
      16             :     module procedure CmpDayNite_2d_R_Copy
      17             :     module procedure CmpDayNite_3d_R_Copy
      18             :     module procedure CmpDayNite_1d_I
      19             :     module procedure CmpDayNite_2d_I
      20             :     module procedure CmpDayNite_3d_I
      21             :   end interface ! CmpDayNite
      22             : 
      23             :   interface ExpDayNite
      24             :     module procedure ExpDayNite_1d_R
      25             :     module procedure ExpDayNite_2d_R
      26             :     module procedure ExpDayNite_3d_R
      27             :     module procedure ExpDayNite_1d_I
      28             :     module procedure ExpDayNite_2d_I
      29             :     module procedure ExpDayNite_3d_I
      30             :   end interface ! ExpDayNite
      31             : 
      32             :   interface cmparray
      33             :     module procedure cmparray_1d_R
      34             :     module procedure cmparray_2d_R
      35             :     module procedure cmparray_3d_R
      36             :   end interface ! cmparray
      37             : 
      38             :   interface chksum
      39             :     module procedure chksum_1d_R
      40             :     module procedure chksum_2d_R
      41             :     module procedure chksum_3d_R
      42             :     module procedure chksum_1d_I
      43             :     module procedure chksum_2d_I
      44             :     module procedure chksum_3d_I
      45             :   end interface ! chksum
      46             : 
      47             :   contains
      48             : 
      49           0 :   subroutine CmpDayNite_1d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1)
      50             :     integer, intent(in) :: Nday, Nnite
      51             :     integer, intent(in) :: il1, iu1
      52             :     integer, intent(in), dimension(Nday) :: IdxDay
      53             :     integer, intent(in), dimension(Nnite) :: IdxNite
      54             :     real(r8), intent(inout), dimension(il1:iu1) :: Array
      55             : 
      56           0 :     call CmpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, 1, 1, 1, 1)
      57             : 
      58           0 :     return
      59             :   end subroutine CmpDayNite_1d_R
      60             : 
      61      391783 :   subroutine CmpDayNite_2d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2)
      62             :     integer, intent(in) :: Nday, Nnite
      63             :     integer, intent(in) :: il1, iu1
      64             :     integer, intent(in) :: il2, iu2
      65             :     integer, intent(in), dimension(Nday) :: IdxDay
      66             :     integer, intent(in), dimension(Nnite) :: IdxNite
      67             :     real(r8), intent(inout), dimension(il1:iu1,il2:iu2) :: Array
      68             : 
      69      391783 :     call CmpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2, 1, 1)
      70             : 
      71      391783 :     return
      72             :   end subroutine CmpDayNite_2d_R
      73             : 
      74      391783 :   subroutine CmpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2,iu2, il3, iu3)
      75             :     integer, intent(in) :: Nday, Nnite
      76             :     integer, intent(in) :: il1, iu1
      77             :     integer, intent(in) :: il2, iu2
      78             :     integer, intent(in) :: il3, iu3
      79             :     integer, intent(in), dimension(Nday) :: IdxDay
      80             :     integer, intent(in), dimension(Nnite) :: IdxNite
      81             :     real(r8), intent(inout), dimension(il1:iu1,il2:iu2,il3:iu3) :: Array
      82             : 
      83      783566 :     real(r8), dimension(il1:iu1) :: tmp
      84             :     integer :: i, j, k
      85             : 
      86             : 
      87      783566 :     do k = il3, iu3
      88    11361707 :       do j = il2, iu2
      89             : 
      90    17887230 :         tmp(1:Nnite) = Array(IdxNite(1:Nnite),j,k)
      91   338708682 :         Array(il1:il1+Nday-1,j,k) = Array(IdxDay(1:Nday),j,k)
      92    18279013 :         Array(il1+Nday:il1+Nday+Nnite-1,j,k) = tmp(1:Nnite)
      93             : 
      94             :       end do
      95             :     end do
      96             : 
      97      391783 :     return
      98             :   end subroutine CmpDayNite_3d_R
      99             : 
     100     2742481 :   subroutine CmpDayNite_1d_R_Copy(InArray, OutArray, Nday, IdxDay, Nnite, IdxNite, il1, iu1)
     101             :     integer, intent(in) :: Nday, Nnite
     102             :     integer, intent(in) :: il1, iu1
     103             :     integer, intent(in), dimension(Nday) :: IdxDay
     104             :     integer, intent(in), dimension(Nnite) :: IdxNite
     105             :     real(r8), intent(in), dimension(il1:iu1) :: InArray
     106             :     real(r8), intent(out), dimension(il1:iu1) :: OutArray
     107             : 
     108     2742481 :     call CmpDayNite_3d_R_Copy(InArray, OutArray, Nday, IdxDay, Nnite, IdxNite, il1, iu1, 1, 1, 1, 1)
     109             : 
     110     2742481 :     return
     111             :   end subroutine CmpDayNite_1d_R_Copy
     112             : 
     113     3526047 :   subroutine CmpDayNite_2d_R_Copy(InArray, OutArray, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2)
     114             :     integer, intent(in) :: Nday, Nnite
     115             :     integer, intent(in) :: il1, iu1
     116             :     integer, intent(in) :: il2, iu2
     117             :     integer, intent(in), dimension(Nday) :: IdxDay
     118             :     integer, intent(in), dimension(Nnite) :: IdxNite
     119             :     real(r8), intent(in), dimension(il1:iu1,il2:iu2) :: InArray
     120             :     real(r8), intent(out), dimension(il1:iu1,il2:iu2) :: OutArray
     121             : 
     122     3526047 :     call CmpDayNite_3d_R_Copy(InArray, OutArray, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2, 1, 1)
     123             : 
     124     3526047 :     return
     125             :   end subroutine CmpDayNite_2d_R_Copy
     126             : 
     127     7835660 :   subroutine CmpDayNite_3d_R_Copy(InArray, OutArray, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2,iu2, il3, iu3)
     128             :     integer, intent(in) :: Nday, Nnite
     129             :     integer, intent(in) :: il1, iu1
     130             :     integer, intent(in) :: il2, iu2
     131             :     integer, intent(in) :: il3, iu3
     132             :     integer, intent(in), dimension(Nday) :: IdxDay
     133             :     integer, intent(in), dimension(Nnite) :: IdxNite
     134             :     real(r8), intent(in), dimension(il1:iu1,il2:iu2,il3:iu3) :: InArray
     135             :     real(r8), intent(out), dimension(il1:iu1,il2:iu2,il3:iu3) :: OutArray
     136             : 
     137             :     integer :: i, j, k
     138             : 
     139             : 
     140    43879696 :     do k = il3, iu3
     141   942629898 :       do j = il2, iu2
     142             : 
     143 14388846602 :          do i=il1,il1+Nday-1
     144 14388846602 :             OutArray(i,j,k) = InArray(IdxDay(i-il1+1),j,k)
     145             :          enddo
     146  1555796096 :          do i=il1+Nday,il1+Nday+Nnite-1
     147  1519752060 :             OutArray(i,j,k) = InArray(IdxNite(i-(il1+Nday)+1),j,k)
     148             :          enddo
     149             :         
     150             : 
     151             :       end do
     152             :     end do
     153             : 
     154     7835660 :     return
     155             :   end subroutine CmpDayNite_3d_R_Copy
     156             : 
     157      391783 :   subroutine CmpDayNite_1d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1)
     158             :     integer, intent(in) :: Nday, Nnite
     159             :     integer, intent(in) :: il1, iu1
     160             :     integer, intent(in), dimension(Nday) :: IdxDay
     161             :     integer, intent(in), dimension(Nnite) :: IdxNite
     162             :     integer, intent(inout), dimension(il1:iu1) :: Array
     163             : 
     164      391783 :     call CmpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, 1, 1, 1, 1)
     165             : 
     166      391783 :     return
     167             :   end subroutine CmpDayNite_1d_I
     168             : 
     169           0 :   subroutine CmpDayNite_2d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2)
     170             :     integer, intent(in) :: Nday, Nnite
     171             :     integer, intent(in) :: il1, iu1
     172             :     integer, intent(in) :: il2, iu2
     173             :     integer, intent(in), dimension(Nday) :: IdxDay
     174             :     integer, intent(in), dimension(Nnite) :: IdxNite
     175             :     integer, intent(inout), dimension(il1:iu1,il2:iu2) :: Array
     176             : 
     177           0 :     call CmpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2, 1, 1)
     178             : 
     179           0 :     return
     180             :   end subroutine CmpDayNite_2d_I
     181             : 
     182      391783 :   subroutine CmpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2,iu2, il3, iu3)
     183             :     integer, intent(in) :: Nday, Nnite
     184             :     integer, intent(in) :: il1, iu1
     185             :     integer, intent(in) :: il2, iu2
     186             :     integer, intent(in) :: il3, iu3
     187             :     integer, intent(in), dimension(Nday) :: IdxDay
     188             :     integer, intent(in), dimension(Nnite) :: IdxNite
     189             :     integer, intent(inout), dimension(il1:iu1,il2:iu2,il3:iu3) :: Array
     190             : 
     191      783566 :     integer, dimension(il1:iu1) :: tmp
     192             :     integer :: i, j, k
     193             : 
     194             : 
     195      783566 :     do k = il3, iu3
     196     1175349 :       do j = il2, iu2
     197             : 
     198      662490 :         tmp(1:Nnite) = Array(IdxNite(1:Nnite),j,k)
     199    12544766 :         Array(il1:il1+Nday-1,j,k) = Array(IdxDay(1:Nday),j,k)
     200     1054273 :         Array(il1+Nday:il1+Nday+Nnite-1,j,k) = tmp(1:Nnite)
     201             : 
     202             :       end do
     203             :     end do
     204             : 
     205      391783 :     return
     206             :   end subroutine CmpDayNite_3d_I
     207             : 
     208     7052094 :   subroutine ExpDayNite_1d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1)
     209             :     integer, intent(in) :: Nday, Nnite
     210             :     integer, intent(in) :: il1, iu1
     211             :     integer, intent(in), dimension(Nday) :: IdxDay
     212             :     integer, intent(in), dimension(Nnite) :: IdxNite
     213             :     real(r8), intent(inout), dimension(il1:iu1) :: Array
     214             : 
     215     7052094 :     call ExpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, 1, 1, 1, 1)
     216             : 
     217     7052094 :     return
     218             :   end subroutine ExpDayNite_1d_R
     219             : 
     220     2742481 :   subroutine ExpDayNite_2d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2)
     221             :     integer, intent(in) :: Nday, Nnite
     222             :     integer, intent(in) :: il1, iu1
     223             :     integer, intent(in) :: il2, iu2
     224             :     integer, intent(in), dimension(Nday) :: IdxDay
     225             :     integer, intent(in), dimension(Nnite) :: IdxNite
     226             :     real(r8), intent(inout), dimension(il1:iu1,il2:iu2) :: Array
     227             : 
     228     2742481 :     call ExpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2, 1, 1)
     229             : 
     230     2742481 :     return
     231             :   end subroutine ExpDayNite_2d_R
     232             : 
     233     9794575 :   subroutine ExpDayNite_3d_R(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2,iu2, il3, iu3)
     234             :     integer, intent(in) :: Nday, Nnite
     235             :     integer, intent(in) :: il1, iu1
     236             :     integer, intent(in) :: il2, iu2
     237             :     integer, intent(in) :: il3, iu3
     238             :     integer, intent(in), dimension(Nday) :: IdxDay
     239             :     integer, intent(in), dimension(Nnite) :: IdxNite
     240             :     real(r8), intent(inout), dimension(il1:iu1,il2:iu2,il3:iu3) :: Array
     241             : 
     242    19589150 :     real(r8), dimension(il1:iu1) :: tmp
     243             :     integer :: i, j, k
     244             : 
     245             : 
     246    19589150 :     do k = il3, iu3
     247    99121099 :       do j = il2, iu2
     248             : 
     249  1273293749 :         tmp(1:Nday) = Array(1:Nday,j,k)
     250   268970940 :         Array(IdxNite(1:Nnite),j,k) = Array(il1+Nday:il1+Nday+Nnite-1,j,k)
     251  1283088324 :         Array(IdxDay(1:Nday),j,k) = tmp(1:Nday)
     252             : 
     253             :       end do
     254             :     end do
     255             : 
     256     9794575 :     return
     257             :   end subroutine ExpDayNite_3d_R
     258             : 
     259      391783 :   subroutine ExpDayNite_1d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1)
     260             :     integer, intent(in) :: Nday, Nnite
     261             :     integer, intent(in) :: il1, iu1
     262             :     integer, intent(in), dimension(Nday) :: IdxDay
     263             :     integer, intent(in), dimension(Nnite) :: IdxNite
     264             :     integer, intent(inout), dimension(il1:iu1) :: Array
     265             : 
     266      391783 :     call ExpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, 1, 1, 1, 1)
     267             : 
     268      391783 :     return
     269             :   end subroutine ExpDayNite_1d_I
     270             : 
     271           0 :   subroutine ExpDayNite_2d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2)
     272             :     integer, intent(in) :: Nday, Nnite
     273             :     integer, intent(in) :: il1, iu1
     274             :     integer, intent(in) :: il2, iu2
     275             :     integer, intent(in), dimension(Nday) :: IdxDay
     276             :     integer, intent(in), dimension(Nnite) :: IdxNite
     277             :     integer, intent(inout), dimension(il1:iu1,il2:iu2) :: Array
     278             : 
     279           0 :     call ExpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2, iu2, 1, 1)
     280             : 
     281           0 :     return
     282             :   end subroutine ExpDayNite_2d_I
     283             : 
     284      391783 :   subroutine ExpDayNite_3d_I(Array, Nday, IdxDay, Nnite, IdxNite, il1, iu1, il2,iu2, il3, iu3)
     285             :     integer, intent(in) :: Nday, Nnite
     286             :     integer, intent(in) :: il1, iu1
     287             :     integer, intent(in) :: il2, iu2
     288             :     integer, intent(in) :: il3, iu3
     289             :     integer, intent(in), dimension(Nday) :: IdxDay
     290             :     integer, intent(in), dimension(Nnite) :: IdxNite
     291             :     integer, intent(inout), dimension(il1:iu1,il2:iu2,il3:iu3) :: Array
     292             : 
     293      783566 :     integer, dimension(il1:iu1) :: tmp
     294             :     integer :: i, j, k
     295             : 
     296             : 
     297      783566 :     do k = il3, iu3
     298     1175349 :       do j = il2, iu2
     299             : 
     300     6272383 :         tmp(1:Nday) = Array(1:Nday,j,k)
     301     1324980 :         Array(IdxNite(1:Nnite),j,k) = Array(il1+Nday:il1+Nday+Nnite-1,j,k)
     302     6664166 :         Array(IdxDay(1:Nday),j,k) = tmp(1:Nday)
     303             : 
     304             :       end do
     305             :     end do
     306             : 
     307      391783 :     return
     308             :   end subroutine ExpDayNite_3d_I
     309             : 
     310             : !******************************************************************************!
     311             : !                                                                              !
     312             : !                                 DEBUG                                        !
     313             : !                                                                              !
     314             : !******************************************************************************!
     315             : 
     316             :   subroutine cmparray_1d_R(name, Ref, New, id1, is1, ie1)
     317             :     character(*), intent(in) :: name
     318             :     integer,  intent(in) :: id1, is1, ie1
     319             :     real(r8), intent(in), dimension(id1) :: Ref
     320             :     real(r8), intent(in), dimension(id1) :: New
     321             : 
     322             :     call cmparray_3d_R(name, Ref, New, id1, is1, ie1, 1, 1, 1, 1, 1, 1)
     323             :   end subroutine cmparray_1d_R
     324             : 
     325             :   subroutine cmparray_2d_R(name, Ref, New, id1, is1, ie1, id2, is2, ie2)
     326             :     character(*), intent(in) :: name
     327             :     integer,  intent(in) :: id1, is1, ie1
     328             :     integer,  intent(in) :: id2, is2, ie2
     329             :     real(r8), intent(in), dimension(id1, id2) :: Ref
     330             :     real(r8), intent(in), dimension(id1, id2) :: New
     331             : 
     332             :     call cmparray_3d_R(name, Ref, New, id1, is1, ie1, id2, is2, ie2, 1, 1, 1)
     333             :   end subroutine cmparray_2d_R
     334             : 
     335             :   subroutine cmparray_3d_R(name, Ref, New, id1, is1, ie1, id2, is2, ie2, id3, is3, ie3)
     336             :     character(*), intent(in) :: name
     337             :     integer,  intent(in) :: id1, is1, ie1
     338             :     integer,  intent(in) :: id2, is2, ie2
     339             :     integer,  intent(in) :: id3, is3, ie3
     340             :     real(r8), intent(in), dimension(id1, id2, id3) :: Ref
     341             :     real(r8), intent(in), dimension(id1, id2, id3) :: New
     342             : 
     343             :     integer :: i, j, k
     344             :     integer :: nerr
     345             :     logical :: found
     346             :     real(r8):: rdiff
     347             :     real(r8), parameter :: rtol = 1.0e-13_r8
     348             : 
     349             :     nerr = 0
     350             : 
     351             :     do k = is3, ie3
     352             :       do j = is2, ie2
     353             : 
     354             :         found = .false.
     355             :         do i = is1, ie1
     356             :           rdiff = abs(New(i,j,k)-Ref(i,j,k))
     357             :           rdiff = rdiff / merge(abs(Ref(i,j,k)), 1.0_r8, Ref(i,j,k) /= 0.0_r8)
     358             :           if ( rdiff > rtol ) then
     359             :             found = .true.
     360             :             exit
     361             :           end if
     362             :         end do
     363             : 
     364             :         if ( found ) then
     365             :           do i = is1, ie1
     366             :             rdiff = abs(New(i,j,k)-Ref(i,j,k))
     367             :             rdiff = rdiff / merge(abs(Ref(i,j,k)), 1.0_r8, Ref(i,j,k) /= 0.0_r8)
     368             :             if ( rdiff > rtol ) then
     369             :               print 666, name, i, j, k, Ref(i, j, k), New(i, j, k), rdiff
     370             :               nerr = nerr + 1
     371             :               if ( nerr > 10 ) stop
     372             :             end if
     373             :           end do
     374             :         end if
     375             : 
     376             :       end do
     377             :     end do
     378             : 
     379             :     return
     380             : 666 format('cmp3d: ', a10, 3(1x, i4), 3(1x, e20.14))
     381             : 
     382             :   end subroutine cmparray_3d_R
     383             : 
     384             :   subroutine chksum_1d_R(name, Ref, id1, is1, ie1)
     385             :     character(*), intent(in) :: name
     386             :     integer,  intent(in) :: id1, is1, ie1
     387             :     real(r8), intent(in), dimension(id1) :: Ref
     388             : 
     389             :     call chksum_3d_R(name, Ref, id1, is1, ie1, 1, 1, 1, 1, 1, 1)
     390             :   end subroutine chksum_1d_R
     391             : 
     392             :   subroutine chksum_1d_I(name, Ref, id1, is1, ie1)
     393             :     character(*), intent(in) :: name
     394             :     integer,  intent(in) :: id1, is1, ie1
     395             :     integer,  intent(in), dimension(id1) :: Ref
     396             : 
     397             :     call chksum_3d_I(name, Ref, id1, is1, ie1, 1, 1, 1, 1, 1, 1)
     398             :   end subroutine chksum_1d_I
     399             : 
     400             :   subroutine chksum_2d_R(name, Ref, id1, is1, ie1, id2, is2, ie2)
     401             :     character(*), intent(in) :: name
     402             :     integer,  intent(in) :: id1, is1, ie1
     403             :     integer,  intent(in) :: id2, is2, ie2
     404             :     real(r8), intent(in), dimension(id1, id2) :: Ref
     405             : 
     406             :     call chksum_3d_R(name, Ref, id1, is1, ie1, id2, is2, ie2, 1, 1, 1)
     407             :   end subroutine chksum_2d_R
     408             : 
     409             :   subroutine chksum_2d_I(name, Ref, id1, is1, ie1, id2, is2, ie2)
     410             :     character(*), intent(in) :: name
     411             :     integer,  intent(in) :: id1, is1, ie1
     412             :     integer,  intent(in) :: id2, is2, ie2
     413             :     integer,  intent(in), dimension(id1, id2) :: Ref
     414             : 
     415             :     call chksum_3d_I(name, Ref, id1, is1, ie1, id2, is2, ie2, 1, 1, 1)
     416             :   end subroutine chksum_2d_I
     417             : 
     418             :   subroutine chksum_3d_R(name, Ref, id1, is1, ie1, id2, is2, ie2, id3, is3, ie3)
     419             :     character(*), intent(in) :: name
     420             :     integer,  intent(in) :: id1, is1, ie1
     421             :     integer,  intent(in) :: id2, is2, ie2
     422             :     integer,  intent(in) :: id3, is3, ie3
     423             : !orig    real(r8), intent(in), dimension(id1, id2, id3) :: Ref
     424             :     real(r8), intent(in), dimension(is1:ie1, is2:ie2, is3:ie3) :: Ref
     425             : 
     426             :     real(r8) :: chksum
     427             :     real(r8) :: rmin, rmax
     428             :     integer :: i, j, k
     429             :     integer :: imin, jmin, kmin
     430             :     integer :: imax, jmax, kmax
     431             : 
     432             :     imin = is1 ; jmin = is2 ; kmin = is3
     433             :     imax = is1 ; jmax = is2 ; kmax = is3
     434             :     rmin = Ref(is1, is2, is3) ; rmax = rmin
     435             : 
     436             :     chksum = 0.0_r8
     437             : 
     438             :     do k = is3, ie3
     439             :       do j = is2, ie2
     440             :         do i = is1, ie1
     441             :           chksum = chksum + abs(Ref(i,j,k))
     442             :           if ( Ref(i,j,k) < rmin ) then
     443             :             rmin = Ref(i,j,k)
     444             :             imin = i ; jmin = j ; kmin = k
     445             :           end if
     446             :           if ( Ref(i,j,k) > rmax ) then
     447             :             rmax = Ref(i,j,k)
     448             :             imax = i ; jmax = j ; kmax = k
     449             :           end if
     450             :         end do
     451             :       end do
     452             :     end do
     453             : 
     454             :     print 666, name, chksum, imin, jmin, kmin, imax, jmax, kmax
     455             : 666 format('chksum: ', a8, 1x, e20.14, 6(1x, i4))
     456             : 
     457             :   end subroutine chksum_3d_R
     458             : 
     459             :   subroutine chksum_3d_I(name, Ref, id1, is1, ie1, id2, is2, ie2, id3, is3, ie3)
     460             :     character(*), intent(in) :: name
     461             :     integer,  intent(in) :: id1, is1, ie1
     462             :     integer,  intent(in) :: id2, is2, ie2
     463             :     integer,  intent(in) :: id3, is3, ie3
     464             :     integer,  intent(in), dimension(id1, id2, id3) :: Ref
     465             : 
     466             :     integer :: i, j, k
     467             :     integer :: chksum
     468             :     chksum = 0
     469             : 
     470             :     do k = is3, ie3
     471             :       do j = is2, ie2
     472             :         do i = is1, ie1
     473             :           chksum = chksum + abs(Ref(i,j,k))
     474             :         end do
     475             :       end do
     476             :     end do
     477             : 
     478             :     print 666, name, chksum
     479             : 666 format('chksum: ', a8, 1x, i8)
     480             : 
     481             :   end subroutine chksum_3d_I
     482             : 
     483             : end module cmparray_mod

Generated by: LCOV version 1.14