主题:[讨论]foran中可否定义一个标号代替某种类型定义
bactone
[专家分:0] 发布于 2012-05-31 18:46:00
请教:
fortran 中可否定义一个标号代替某种类型定义如:
定义complex1 代替 类型定义 complex*8,这样在程序中定义某个变量时可以用:
complex1 :: a
complex1 :: b
来代替:
complex*8 :: a
complex*8 :: b
希望可以这样做的原因是当我要改变a,b的类型时,我不用一个个地去改变没处定义只需要将complex1重新定义,如
定义complex1 代表 complex*16,等等
想请问哪位能否帮忙解答谢谢![em10]
回复列表 (共7个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2012-06-01 09:39:00
如果都是 complex ,只是精度不同。则可以用下面的代码(类似,你稍微改改)
[quote]Program MyKind
implicit none
Integer , parameter :: MyKind = 4 !// 将来修改此处为 8 既可改为双精度
Real( Kind = MyKind ) :: c1 , c2
c1 = 4.0_MyKind
c2 = 5.0_MyKind
write( * , * ) c1 , c2
End Program MyKind[/quote]
如果你希望把 real 在将来改成 integer 这样的,恐怕就要用 Type_Alias 了。
这是一个较新的语法,我不确定你的编译器支持它。
[quote]Program Type_Alias_Exp
implicit none
Type_Alias :: DataKind => Real !//将来修改此处为 Real*8
Type( DataKind ) :: dkA , dkB
Real :: rA
dkA = 3.14
dkB = 3.16
rA = dkA + 1.0
write(*,*) rA
End Program Type_Alias_Exp[/quote]
板凳
rockymt [专家分:110] 发布于 2012-06-01 11:06:00
建立模块
module prcs
implicit none
integer, parameter :: DP = selected_real_kind(p=13,r=200) ! 这里改精度p和范围r,这样与编译器无关
end module prcs
program main
use prcs
implicit none
complex( Kind = DP ) :: c1 , c2
.....
.....
c1 = c2 + cmplx(1.0_DP,2.0_DP)
end program main
3 楼
xiashuning [专家分:110] 发布于 2012-06-05 08:46:00
或者使用预处理也是可以的~
4 楼
bactone [专家分:0] 发布于 2012-06-07 16:03:00
多谢啊哈哈
5 楼
bactone [专家分:0] 发布于 2012-06-07 16:14:00
请问当一个程序有很多文件时,
Integer , parameter :: MyKind = 4 !// 将来修改此处为 8 既可改为双精度
上面这一行是不是要在每个文件中都定义,还是只需要在主程序中开始的地方定义一下
6 楼
dongyuanxun [专家分:7180] 发布于 2012-06-07 17:56:00
难道你从来不用module么
7 楼
臭石头雪球 [专家分:23030] 发布于 2012-06-08 07:07:00
在多文档的程序里,可以用 include 或者 module 解决这个问题。
推荐使用 module
我来回复