计算化学公社

 找回密码 Forget password
 注册 Register
Views: 2377|回复 Reply: 1
打印 Print 上一主题 Last thread 下一主题 Next thread

[Fortran] FORTRAN动态判断数组精度并进行运算求助

[复制链接 Copy URL]

132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

请教各位大佬,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怎样实现这种运算呢?

20

帖子

0

威望

5140

eV
积分
5160

Level 6 (一方通行)

2#
发表于 Post on 2019-10-15 21:43:16 | 只看该作者 Only view this author
使用重载(看彭国伦书module那章):
  1. module m
  2.   implicit none

  3.   interface sub
  4.     module procedure :: sub_sp
  5.     module procedure :: sub_dp
  6.   end interface

  7.   contains
  8.   subroutine sub_sp(array)
  9.   ! single precision
  10.     real, dimension(:) :: array
  11.     integer :: i
  12.     do i = 1, size(array)
  13.       array(i) = array(i) + i * 2.0
  14.     end do
  15.   end subroutine

  16.   subroutine sub_dp(array)
  17.   ! double precision
  18.     real(kind=8), dimension(:) :: array
  19.     integer :: i
  20.     do i = 1, size(array)
  21.       array(i) = array(i) + i * 2.0D0
  22.     end do
  23.   end subroutine
  24. end module

  25. program main
  26.   use m
  27.   implicit none
  28.   integer :: i
  29.   real, dimension(5) :: a = [(i,i=1,5)]
  30.   real(kind=8), dimension(5) :: b = [(i,i=1,5)]

  31.   call sub(a)
  32.   call sub(b)
  33.   write(*,*) a
  34.   write(*,*) b

  35. end program
复制代码

运行结果:
  1.    3.00000000       6.00000000       9.00000000       12.0000000       15.0000000
  2.    3.0000000000000000        6.0000000000000000        9.0000000000000000        12.000000000000000        15.000000000000000
复制代码

评分 Rate

参与人数
Participants 2
eV +10 收起 理由
Reason
didi_dudu + 5 谢谢!
王二葛 + 5 谢谢分享

查看全部评分 View all ratings

个人网站:东方红茶馆

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-24 04:39 , Processed in 0.165848 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list