| 1 | ! prog=test14
|
|---|
| 2 | ! compilers="ifort17"
|
|---|
| 3 | ! compilers="gfortran ifort17 ifort16 nagfor61 pgf95 g95"
|
|---|
| 4 | ! for compiler in $(echo $compilers) ; do
|
|---|
| 5 | ! echo $compiler -o ${prog}.exe ${prog}.f90
|
|---|
| 6 | ! $compiler -o ${prog}.exe ${prog}.f90
|
|---|
| 7 | ! echo ${prog}.exe
|
|---|
| 8 | ! ./${prog}.exe
|
|---|
| 9 | ! echo ""
|
|---|
| 10 | ! done
|
|---|
| 11 | !
|
|---|
| 12 | PROGRAM test14
|
|---|
| 13 | !
|
|---|
| 14 | ! Purpose: To emulate mis-dimensioned K array, as seen in ROPP-11.
|
|---|
| 15 | !
|
|---|
| 16 |
|
|---|
| 17 | IMPLICIT NONE
|
|---|
| 18 |
|
|---|
| 19 | INTEGER, PARAMETER :: wp=KIND(1.D0)
|
|---|
| 20 | INTEGER, PARAMETER :: m=3, n=2
|
|---|
| 21 | REAL(wp), DIMENSION(:,:), ALLOCATABLE :: K1, K2
|
|---|
| 22 |
|
|---|
| 23 | ! -------------------------------------------------------------------------
|
|---|
| 24 |
|
|---|
| 25 | ALLOCATE( K1(n, m), K2(m, n))
|
|---|
| 26 |
|
|---|
| 27 | print*,'SHAPE(K1) = ', SHAPE(K1)
|
|---|
| 28 | print*,'SHAPE(K2) = ', SHAPE(K2)
|
|---|
| 29 |
|
|---|
| 30 | K1(1, :) = (/ 1.0_wp, 2.0_wp, 3.0_wp /)
|
|---|
| 31 | K1(2, :) = (/ 4.0_wp, 5.0_wp, 6.0_wp /)
|
|---|
| 32 |
|
|---|
| 33 | print*,'K1 = ', K1
|
|---|
| 34 |
|
|---|
| 35 | K2 = K1 ! Let's see if this works
|
|---|
| 36 |
|
|---|
| 37 | print*,'SHAPE(K2) = ', SHAPE(K2) ! redefined
|
|---|
| 38 | print*,'K2 = ', K2
|
|---|
| 39 |
|
|---|
| 40 | print*,'SHAPE( MATMUL(K1, TRANSPOSE(K2)) ) = ', &
|
|---|
| 41 | SHAPE( MATMUL(K1, TRANSPOSE(K2)) )! not defined if Ks keep their original shapes
|
|---|
| 42 |
|
|---|
| 43 | print*, 'MATMUL(K1, TRANSPOSE(K2)) = ', MATMUL(K1, TRANSPOSE(K2))
|
|---|
| 44 |
|
|---|
| 45 | DEALLOCATE (K2, K1)
|
|---|
| 46 |
|
|---|
| 47 | END PROGRAM test14
|
|---|