File: where_16.f90

package info (click to toggle)
lfortran 0.58.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,512 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 33; javascript: 15
file content (39 lines) | stat: -rw-r--r-- 752 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
28
29
30
31
32
33
34
35
36
37
38
39
module update

contains
   subroutine updateres(b, delta, rescon)
      implicit none

      real, intent(in) :: b(:)
      real, intent(in) :: delta
      real, intent(inout) :: rescon(:)

      real :: ax(size(b))
      integer :: idx(size(b))    ! Comment out to avoid abort
      logical :: mask(size(b))

      ax = 1.0

      mask = (abs(rescon) < delta)

      where (mask)
         rescon = max(b - ax, 0.0)
      end where

   end subroutine updateres
end module update

program where_16
   use update
   implicit none

   real :: delta = 2.33

   real :: b(2) = [5.4, 3.6]
   real :: rescon(2) = [2.3, 8.6]

   call updateres(b, delta, rescon)
   print *, rescon
   if( any(abs(rescon - [4.4, 8.6]) > 1e-6) ) error stop

end program where_16