File: array_op_06.f90

package info (click to toggle)
lfortran 0.45.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 46,332 kB
  • sloc: cpp: 137,068; f90: 51,260; python: 6,444; ansic: 4,277; yacc: 2,285; fortran: 806; sh: 524; makefile: 30; javascript: 15
file content (27 lines) | stat: -rw-r--r-- 694 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
program array_op_06
implicit none
integer, parameter :: dim = 2
integer, parameter :: n = 3
integer :: x(n, n)
logical :: mask(n, n)
real :: res

x = reshape((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/n, n/))
mask = reshape((/.true., .false., .true., .false., .true., .false., .true., .false., .true./), (/n, n/))

res = var_mask_2_iint8_dp(x, dim, mask)
print *, res
if (abs(res - 5.0) > 1e-8) error stop
contains
function var_mask_2_iint8_dp(x, dim, mask) result(res)
integer, intent(in) :: x(:,:)
integer, intent(in) :: dim
logical, intent(in) :: mask(:,:)
real :: res

real :: n(merge(size(x, 1), size(x, 2), mask=1<dim))

n = count(mask, 1)
res = sum(n)
end function var_mask_2_iint8_dp
end program