|
各位前辈大佬、同学们好!我接触学习fortran、折腾代码好几天了就是解决不了问题,无奈向大家求助!如果发帖格式或者内容有什么不对,请管理员和大家指正!
1. 我目前在笔记本上测试代码,用的是Intel Parallel Studio XE 2013 with VS2012(同学以前帮我安装的,应该是破解版)。生成解决方案没问题、触发断点返回后显示各种dll文件已加载。
2. 我在学习、测试同行前辈给的fortran代码,看起来似乎是以77为基调写的。
我碰到的问题是:在open一个外部的mask.dat数据文件后,无法有效的read,总是会触发断点。
我的学习、调试经历和心路历程如下:
(1)最初是用77的格式.for建了一个代码,尝试读取mask.dat文件,里面就是321行681列的0和1,作为网格供后续使用。在触发断点之后,我一开始想会不会我弄错了行数和列数,于是我分别测试了im=681,jm=321以及im=321,jm=681。还是会在read是触发断点。
(2)于是我简化问题,做了个test.dat:2行2列的矩阵[1 2;3 4]。但read时候还是断点。
(3)之后我也百度了如何用循环读取数据,也解决不了问题(见图1)。百度经验如下:
open(100,file='test.dat',form='formatted')
do i=1,2
read(100,*) (ismask(i,j),j=1,2)
end do
close (100)
(4)我开始怀疑是不是read本身有问题,甚至怀疑会不会是parallel和vs安装时出问题而没注意到?因为在调用堆栈里的信息总是提到“未知函数”。但是我无意中看到了论坛里的一篇文章:教你看懂intel fortran的运行时错误(教你看懂 Intel Fortran 的运行时错误 - Fortran教程 - Fortran Coder 程序员聚集地 (fcode.cn)),文章说道:“由源代码 11 行可知,此处使用了 read(*,*) i 语句,这便是上面第7和第8步骤里的未知函数。read 在源代码里虽然是一个语法规定的语句,但编译后,则是一个函数(位于运行时库中),我们无法看到 read 的源代码。” 看完后我懵懵懂懂,但是有了一点信心再试试,应该是新手的我没有做对。
(5)我想会不会抛弃77、新建一个.f90可以解决问题,但还是会触发断点。(见图2)
(6)测试发现键盘输入是可行的(见图3),但是我不能回避问题。一方面键盘输入mask的600*300的网格就已经很劝退了,另一方面后续还有几个别的文件要读取,是100*100*100级别的。
(7)会有可能是因为我把源码和数据文件放在source和resource里不妥当么?(见图4)
我以前都是用matlab处理数据+可视化的,现在刚接触fortran要学习搭建模型、制作数据,是真的很小白。目前非常茫然、非常期望能得到有经验的大佬们的指点、帮助!哪怕是指点我要不要卸载了重新安装软件?
|
-
4.png
(22.96 KB, 下载次数: 227)
图4
-
3.png
(67.05 KB, 下载次数: 234)
图3
-
2.png
(108.11 KB, 下载次数: 260)
图2
-
1.png
(80.84 KB, 下载次数: 245)
图1
评分
-
查看全部评分
|