Fortran - 1次元配列各要素の逆数平均(Rosseland Mean)の計算!
Updated:
Fortran 95 で1次元配列の各要素の逆数平均(Rosseland Mean)を計算してみました。
0. 前提条件
- LMDE 3 (Linux Mint Debian Edition 3; 64bit) での作業を想定。
- GCC 6.3.0 (GFortran 6.3.0) でのコンパイルを想定。
1. ソースコードの作成
- 1次元配列はソースコード内で直接設定している。
File: rosseland_mean.f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program rosseland_mean
implicit none
real(8) :: a(3) = (/1.0_8, 2.0_8, 3.0_8/)
write (*,*) rmean(a)
stop
contains
! Rosseland-mean 計算
!
! :param integer x(:)
! :return read(8)
real(8) function rmean(x)
implicit none
real(8), intent(IN) :: x(:) ! 形状仮定配列
rmean = size(x) / sum(1.0_8 / x)
end function rmean
end program rosseland_mean
以下は、内部副プログラムではなく、外部副プログラム(interface)を使用するバージョン。
File: rosseland_mean_2.f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
!****************************************************
! 1次元配列の各要素の逆数平均(Rosseland mean)を計算
!
! date name version
! 2018.08.20 mk-mode.com 1.00 新規作成
!
! Copyright(C) 2018 mk-mode.com All Rights Reserved.
!****************************************************
!
program rosseland_mean
implicit none
real(8) :: a(3) = (/1.0_8, 2.0_8, 3.0_8/)
interface
real(8) function rmean(x)
real(8) :: x(:) ! 形状仮定配列
end function rmean
end interface
write (*,*) rmean(a)
stop
end program rosseland_mean
! Rosseland-mean 計算
!
! :param integer x(:)
! :return read(8)
real(8) function rmean(x)
implicit none
real(8), intent(IN) :: x(:) ! 形状仮定配列
rmean = size(x) / sum(1.0_8 / x)
end function rmean
2. ソースコードのコンパイル
$ gfortran -o rosseland_mean rosseland_mean.f95
$ gfortran -o rosseland_mean_2 rosseland_mean_2.f95
- interface 版の
rosseland_mean_2
では、引数x
に対して INTENT がミスマッチしている旨の警告が出力されるかもしれないが、問題ない。
3. 動作確認
$ ./rosseland_mean
1.6363636363636365
rosseland_mean_2
も結果は同じ。
以上、
Comments