Causal integration in the continuous world is defined as
(1) |
(2) |
(3) |
(4) |
(5) |
(6) |
(7) |
module leakint use adj_modreal, private :: r = 1.
contains
subroutine leakint_init (rho) real, intent (in) :: rho r = rho end subroutine leakint_init
function leakint_op (adj, add, x, y) result (stat) integer :: stat logical, intent (in) :: adj, add real, dimension (:) :: x, y
call adjnull (adj, add, x, y)
if (adj) then call integrate (y,size (y),1,x) else call integrate (x,1,size (x),y) end if
stat = 0
contains
subroutine integrate (inp, nb, ne, out) integer, intent (in) :: nb, ne real, dimension (:), intent (in) :: inp real, dimension (:), intent (out) :: out
integer :: i real :: t
t = 0. do i = nb, ne, sign (1, ne - nb) t = r * t + inp (i) out (i) = out (i) + t end do end subroutine integrate
end function leakint_op
end module leakint
The operator function leakint_op contains and calls the helper subroutine integrate, which implements recusions (5) and (6). Figure 2 illustrates the program for .
causint90
Figure 2 in1 is an input pulse. C in1 is its causal integral. C' in1 is the anticausal integral of the pulse. in2 is a separated doublet. Its causal integration is a box and its anticausal integration is the negative. CC in2 is the double causal integral of in2. |