LCOV - code coverage report
Current view: top level - physics/rrtmgp/ext/rte-kernels - mo_rte_util_array.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 11 22 50.0 %
Date: 2024-12-17 17:57:11 Functions: 2 4 50.0 %

          Line data    Source code
       1             : ! This code is part of Radiative Transfer for Energetics (RTE)
       2             : !
       3             : ! Contacts: Robert Pincus and Eli Mlawer
       4             : ! email:  rrtmgp@aer.com
       5             : !
       6             : ! Copyright 2015-  Atmospheric and Environmental Research,
       7             : !    Regents of the University of Colorado,
       8             : !    Trustees of Columbia University in the City of New York
       9             : ! All right reserved.
      10             : !
      11             : ! Use and duplication is permitted under the terms of the
      12             : !    BSD 3-clause license, see http://opensource.org/licenses/BSD-3-Clause
      13             : ! -------------------------------------------------------------------------------------------------
      14             : module mo_rte_util_array
      15             :   use mo_rte_kind,      only: wp, wl
      16             :   implicit none
      17             :   !>
      18             :   !> Efficiently set arrays to zero
      19             :   !>
      20             :   interface zero_array
      21             :     module procedure zero_array_1D, zero_array_2D, zero_array_3D, zero_array_4D
      22             :   end interface
      23             :   public :: zero_array
      24             : contains
      25             :  !-------------------------------------------------------------------------------------------------
      26             :   ! Initializing arrays to 0
      27             :   !-------------------------------------------------------------------------------------------------
      28           0 :   subroutine zero_array_1D(ni, array) bind(C, name="zero_array_1D")
      29             :     integer,                 intent(in ) :: ni
      30             :     real(wp), dimension(ni), intent(out) :: array
      31             :     ! -----------------------
      32             :     integer :: i
      33             :     ! -----------------------
      34             :     !$acc parallel loop copyout(array)
      35             :     !$omp target teams distribute parallel do simd map(from:array)
      36           0 :     do i = 1, ni
      37           0 :       array(i) = 0.0_wp
      38             :     end do
      39           0 :   end subroutine zero_array_1D
      40             :   ! ----------------------------------------------------------
      41     4930859 :   subroutine zero_array_2D(ni, nj, array) bind(C, name="zero_array_2D")
      42             :     integer,                     intent(in ) :: ni, nj
      43             :     real(wp), dimension(ni, nj), intent(out) :: array
      44             :     ! -----------------------
      45             :     integer :: i,j
      46             :     ! -----------------------
      47             :     !$acc parallel loop collapse(2) copyout(array)
      48             :     !$omp target teams distribute parallel do simd collapse(2) map(from:array)
      49   535842382 :     do j = 1, nj
      50  8740518682 :       do i = 1, ni
      51  8735587823 :         array(i,j) = 0.0_wp
      52             :       end do
      53             :     end do
      54     4930859 :   end subroutine zero_array_2D
      55             :   ! ----------------------------------------------------------
      56     1524662 :   subroutine zero_array_3D(ni, nj, nk, array) bind(C, name="zero_array_3D")
      57             :     integer,                         intent(in ) :: ni, nj, nk
      58             :     real(wp), dimension(ni, nj, nk), intent(out) :: array
      59             :     ! -----------------------
      60             :     integer :: i,j,k
      61             :     ! -----------------------
      62             :     !$acc parallel loop collapse(3) copyout(array)
      63             :     !$omp target teams distribute parallel do simd collapse(3) map(from:array)
      64   184224982 :     do k = 1, nk
      65 17358055062 :       do j = 1, nj
      66 >28159*10^7 :         do i = 1, ni
      67 >28141*10^7 :           array(i,j,k) = 0.0_wp
      68             :         end do
      69             :       end do
      70             :     end do
      71     1524662 :   end subroutine zero_array_3D
      72             :   ! ----------------------------------------------------------
      73           0 :   subroutine zero_array_4D(ni, nj, nk, nl, array) bind(C, name="zero_array_4D")
      74             :     integer,                             intent(in ) :: ni, nj, nk, nl
      75             :     real(wp), dimension(ni, nj, nk, nl), intent(out) :: array
      76             :     ! -----------------------
      77             :     integer :: i,j,k,l
      78             :     ! -----------------------
      79             :     !$acc parallel loop collapse(4) copyout(array)
      80             :     !$omp target teams distribute parallel do simd collapse(4) map(from:array)
      81           0 :     do l = 1, nl
      82           0 :       do k = 1, nk
      83           0 :         do j = 1, nj
      84           0 :           do i = 1, ni
      85           0 :             array(i,j,k,l) = 0.0_wp
      86             :           end do
      87             :         end do
      88             :       end do
      89             :     end do
      90           0 :   end subroutine zero_array_4D
      91             : end module mo_rte_util_array

Generated by: LCOV version 1.14