Fortran 编译注意事项

Fortran 编译注意事项

高精度运算

如果要做精度要求很高的计算,一般在声明实数型变量的时候就要指定是单精度还是双精度,用real(kind=4)便表示单精度,相应地还可以改为8,10,12分别表示双精度及更高的精度。

在学习Fortran的过程中应该是注意到,算式2/32.0/3.0计算结果是不一样的,前者是以整型数据计算后者是按浮点数计算。但是!后者的计算精度有时候还是不够,比如在计算1.0/3.0并赋值给一个双精度变量的时候,计算结果并不是0.3333333333333333,这里要改写成1.0D0/3.0D0才能得到想要的结果。还有在调用Fortran自己的一些数学小函数的时候,一般会有两种写法,一种是一般的方法比如SIN() LOG()这样返回的结果是单精度的(但是在vs studio里面如果编译就开了更高精度则返回更高精度结果!)另一种就是在前面加一个字母D返回双精度的结果比如DSIN() DLOG()

在Fortran里面是没有内置 π \pi π的值的,如果要用的话可以自己定义一个并声明为参数或者common变量,定义的时候有几种方法:
pi = DACOS(-1.D0)
pi = 4*DATAN(1.0D0)

最后记一下在vs studio中利用long double进行编译的方法:

  • 在右侧解决方案资源管理器,右击自己的项目并选择属性
  • 配置属性=>Fortran=>Data
  • 选择前两个Default Integer KINDDefault Real KIND进行调整即可
  • 还需要将声明变量时候写的双精度标识real(kind=8)给去掉,仅保留real

Fortran 读写txt文件

写文件的话就是先用字符串把文件名写好,如果是分段的字符串可以用//来连接,比如下面这段:
filename = 'result' // trim(adjustl(cTemp1)) // '_' // trim(adjustl(cTemp2)) // '.txt'
这一段代码里面用到两个字符串变量character( len = 3 ) :: cTemp1, cTemp2他们是根据代码里面的两个整型数据改来的:
write(cTemp2,'(i3)') N
write(cTemp1,'(i2)') k
再注意到两个函数trim() adjustl(),这是因为在write变量cTemp1,cTemp2的时候多多少少会存在空格,这两个函数合起来可以去掉这些字符前后的空格。

创建文件名之后是打开文件:
open(unit = fileid, file = filename)
其中fileid可以定义为整型变量,并赋予一个值(一般是7~11或更高),或者直接给一个整数就行,只需要注意最后把它关掉close(fileid)

写进txt文件的格式就是参考格式化输出,比如这里要输出一个矩阵,我们对矩阵的行进行循环,每次打印一行。

完整的代码:

open(unit = fileid, file = filename)
do i=1,N
	write(fileid,fmt=100) rho(i,:)
    100 format(f20.16, ',', f20.16, ',' , f20.16, ',', f20.16 ';')
enddo
close(fileid)

如果是按上述方法写的文件,则可以用下面这段代码去读取

filename = 'result' // trim(adjustl(cTemp1)) // '_' // trim(adjustl(cTemp2)) // '.txt'
Open( fileid , File = filename )
do i=1,N
    read(fileid, *) rho(i,:)
end do
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值