计算化学公社
标题:
FORTRAN动态判断数组精度并进行运算求助
[打印本页]
作者Author:
didi_dudu
时间:
2019-10-15 16:12
标题:
FORTRAN动态判断数组精度并进行运算求助
请教各位大佬,fortran可不可以在计算过程中动态判断精度?
比如
subroutine(matrix,prec)
integer, intent(in):: prec
real(kind=prec),intent(in) ::matrix(*)
do i = 1, 100
matrix(i) = matrix(i)*matrix(i)
enddo
end
---------
这样写之后编译会报错,说我的prec没有指定数值。
然而我输入的矩阵可能是双精度也可能是单精度。fortran怎样实现这种运算呢?
作者Author:
St_Maxwell
时间:
2019-10-15 21:43
使用重载(看彭国伦书module那章):
module m
implicit none
interface sub
module procedure :: sub_sp
module procedure :: sub_dp
end interface
contains
subroutine sub_sp(array)
! single precision
real, dimension(:) :: array
integer :: i
do i = 1, size(array)
array(i) = array(i) + i * 2.0
end do
end subroutine
subroutine sub_dp(array)
! double precision
real(kind=8), dimension(:) :: array
integer :: i
do i = 1, size(array)
array(i) = array(i) + i * 2.0D0
end do
end subroutine
end module
program main
use m
implicit none
integer :: i
real, dimension(5) :: a = [(i,i=1,5)]
real(kind=8), dimension(5) :: b = [(i,i=1,5)]
call sub(a)
call sub(b)
write(*,*) a
write(*,*) b
end program
复制代码
运行结果:
3.00000000 6.00000000 9.00000000 12.0000000 15.0000000
3.0000000000000000 6.0000000000000000 9.0000000000000000 12.000000000000000 15.000000000000000
复制代码
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3