形状引継ぎ配列(モジュール使用)

モジュールを使うと、interface文が不要になる。

モジュール: cal_sum_mod.f90

  • cal_sum_mod.f90 1KB ダウンロード
module cal_sum_mod
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/teaching/21.Fortran/02.interface_mod
!
! Revision history:
!  2011-05-09 09:01
!    Initial Version
!  use
!  implicit none
contains
  subroutine cal_sum(a,s)
  ! Description:
  !
  ! Author: am
  !
  ! Host: aofd30
  ! Directory: /work2/am/teaching/21.Fortran/01.interface
  !
  ! Revision history:
  !  2011-05-09 08:42
  !    Initial Version
 
    real,intent(in) :: a(:)
    real,intent(out) :: s
 
    write(*,'(a)')'Subroutine: cal_sum'
    write(*,*)''
 
    n=size(a,1)
    print *,'n= ',n
 
    do i=1,n
      s=s+a(i)
    enddo !i
 
    write(*,'(a)')'Done subroutine cal_sum.'
    write(*,*)
  end subroutine cal_sum
end module cal_sum_mod

主プログラム: test_cal_sum_mod.f90

  • test_cal_sum_mod.f90 1KB ダウンロード
program test_cal_sum_mod
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/teaching/21.Fortran/02.interface_mod
!
! Revision history:
!  2011-05-09 09:02
!    Initial Version
  use cal_sum_mod
!  implicit none
  integer,parameter :: n=10
  real a(n)
  write(*,'(a)')'Program test_cal_sum_mod starts.'
!  write(*,*)''
  do i=1,n
    a(i)=float(i)
  enddo !i
  call cal_sum(a,s)
  print *,'i, a(i)'
  do i=1,n
    print *,i,a(i)
  enddo !i
  print *
  print *,'sum= ',s
  print *
  write(*,'(a)')'Done program test_cal_sum_mod.'
  write(*,*)
end program test_cal_sum_mod

使用例

コンパイル

makefile:

  • makefile 3KB ダウンロード

$ make

make: Warning: File `makefile' has modification time 4.7e+02 s in the future

if [ ! -d ../obj ]; then \

mkdir -p ../obj ; \

fi

ifort -c -module ../obj -c -o ../obj/cal_sum_mod.o cal_sum_mod.f90

ifort -c -module ../obj -c -o ../obj/test_cal_sum_mod.o test_cal_sum_mod.f90

ifort -o test_cal_sum_mod ../obj/cal_sum_mod.o ../obj/test_cal_sum_mod.o -module ../obj

make: warning: Clock skew detected. Your build may be incomplete.

real 0m0.116s

user 0m0.066s

sys 0m0.033s

実行例

$ ./test_cal_sum_mod

Program test_cal_sum_mod starts.

Subroutine: cal_sum

n= 10

Done subroutine cal_sum.

i, a(i)

1 1.000000

2 2.000000

3 3.000000

4 4.000000

5 5.000000

6 6.000000

7 7.000000

8 8.000000

9 9.000000

10 10.00000

sum= 55.00000

Done program test_cal_sum_mod.