形状引継ぎ配列(モジュール使用)
モジュールを使うと、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.