You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				module test_m
 | 
						|
 | 
						|
contains
 | 
						|
 | 
						|
    subroutine sliceAndPrintAddress(s, a)
 | 
						|
      character(len=*), intent(in) :: s
 | 
						|
      complex, dimension(:,:,:,:), intent(in) :: a
 | 
						|
 | 
						|
      call printAddress(s, a(:,:,:,1))
 | 
						|
    end subroutine sliceAndPrintAddress
 | 
						|
 | 
						|
    subroutine sliceAndPrintAddress2(s, a)
 | 
						|
      character(len=*), intent(in) :: s
 | 
						|
      complex, dimension(:,:,:,2:), intent(inout) :: a
 | 
						|
 | 
						|
      do n=2,3
 | 
						|
        a(1,1,1,n) = n
 | 
						|
        call printAddress(s, a(:,:,:,n))
 | 
						|
      end do
 | 
						|
    end subroutine sliceAndPrintAddress2
 | 
						|
 | 
						|
    subroutine sliceAndPrintAddress3(s, a)
 | 
						|
      character(len=*), intent(in) :: s
 | 
						|
      complex, dimension(:,:,1:,2:), intent(inout) :: a
 | 
						|
 | 
						|
      do n=2,3
 | 
						|
        a(1,1,1,n) = n
 | 
						|
        call printAddress(s, a(:,:,:,n))
 | 
						|
      end do
 | 
						|
    end subroutine sliceAndPrintAddress3
 | 
						|
 | 
						|
    subroutine printAddress(s, a)
 | 
						|
       character(len=*), intent(in) :: s
 | 
						|
       complex, dimension(*), intent(in), target :: a
 | 
						|
 | 
						|
       write(*,"(A,' & 0x',Z0)") s, loc(a)
 | 
						|
    end subroutine printAddress
 | 
						|
end module test_m
 | 
						|
 | 
						|
program test
 | 
						|
    use test_m  
 | 
						|
    implicit none
 | 
						|
 | 
						|
    complex, dimension(:), allocatable, target :: alloc
 | 
						|
    complex, dimension(:,:,:,:), pointer, contiguous :: p
 | 
						|
 | 
						|
    allocate(alloc(10240))
 | 
						|
    p(0:15,0:15,1:2,1:20) => alloc
 | 
						|
 | 
						|
    call printAddress("p        ", p)
 | 
						|
    call printAddress("p slice 1", p(:,:,:,1))
 | 
						|
    call printAddress("p slice 2", p(:,:,:,2))
 | 
						|
 | 
						|
    call sliceAndPrintAddress("sub p slice ", p)
 | 
						|
 | 
						|
    call sliceAndPrintAddress2("sub p slice2", p)
 | 
						|
 | 
						|
    call sliceAndPrintAddress3("sub p slice3", p)
 | 
						|
end program test
 |