Fortran Coder

查看: 7490|回复: 7
打印 上一主题 下一主题

[求助] Unclassifiable statement 错误

[复制链接]

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
跳转到指定楼层
楼主
发表于 2021-11-25 21:12:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sqs 于 2021-11-25 21:14 编辑

请问在这个地方为什么关于这个k(x,y)会报错呢,报错如下“Unclassifialbe statement at (1)”
我这一步的目的是想要得到每一个k值,如果可以使用k(x,y)表示更好,应该如何实现呢


QQ图片20211125211345.png (59.59 KB, 下载次数: 154)

QQ图片20211125211345.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

沙发
发表于 2021-11-26 08:22:16 | 只看该作者
k声明为变量没有声明为二维数组,不能当数组用
(x/n)b1里,b1前缺运算符
两个整数除法会自动取整,可能你要的是x*1.0/n
b1,b2都是有2个元素的数组,如果不指定元素,计算结果也是2个元素的数组

评分

参与人数 1F 币 +3 收起 理由
fcode + 3

查看全部评分

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
板凳
 楼主| 发表于 2021-11-26 10:51:18 | 只看该作者
necrohan 发表于 2021-11-26 08:22
k声明为变量没有声明为二维数组,不能当数组用
(x/n)b1里,b1前缺运算符
两个整数除法会自动取整,可能你要 ...

好的,那这个地方就相当于如果需要两个整数相除得到的是一个浮点数,需要给整数乘上一个浮点数是吧
另外
我不是很清楚,这个地方b1,b2都是具有两个元素的数组,但是我通过分割计算后,需要得到的k也要是一个两个元素的数组,但是怎么通过把这个k(2)和分割的指标x,y联系起来呢,取地址吗?
(其实我本来想着,因为下x,y=1,999嘛,b1,2又是两个元素的数组,而如果这样的话,k会是一个1998*999的矩阵吗,但是这样的话,每一个k值对应的是1,3,5...的奇数,似乎不太好定义k矩阵的指标)
大佬看能有什么办法嘛

98

帖子

0

主题

0

精华

大师

F 币
658 元
贡献
293 点

规矩勋章元老勋章新人勋章

地板
发表于 2021-11-26 22:28:55 | 只看该作者
本帖最后由 胡文刚 于 2021-11-26 22:44 编辑

这样是你想要的吗?

[Fortran] 纯文本查看 复制代码
Program workfile
  Implicit None
  integer , parameter :: n = 1000
  real , parameter :: PI = acos(-1.0) , a = 1.42e-10
  real :: b1(2), b2(2)
  real , allocatable :: k(:,:,:)
  integer :: x , y
  allocate(k(2,n-1,n-1))
  b1 = [ 2*PI/a*sqrt(3.0) , 2*PI/a ]
  b2 = [ 2*PI/a*sqrt(3.0) ,-2*PI/a ]
  Forall(x=1:size(k,2) , y=1:size(k,3))
    k(:,x,y) = (b1*x+b2*y)/n
  End Forall
End Program workfile


评分

参与人数 1F 币 +3 收起 理由
fcode + 3

查看全部评分

天之道,损有余而补不足

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
5#
 楼主| 发表于 2021-11-28 10:44:07 | 只看该作者
胡文刚 发表于 2021-11-26 22:28
这样是你想要的吗?

[mw_shl_code=fortran,true]Program workfile

是的是的,十分感谢您了

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
6#
 楼主| 发表于 2021-12-8 21:09:15 | 只看该作者
胡文刚 发表于 2021-11-26 22:28
这样是你想要的吗?

[mw_shl_code=fortran,true]Program workfile

您好,我刚刚上手Fortran,这个地方可能还有几个问题需要询问一下,
1.allocate分配动态数组的时候,这个地方数组的三个参数是什么意思呢,是k数组的三个维数的上限值吗。
2.这个地方的size(k,2)和size(k,3)是什么意思呢,对应k的行数,或者列数?
3.如果我需要单独输出每一个K值需要怎么输出呢,如print *,'',k(2,1,3),这样的吗?
感谢

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
7#
发表于 2021-12-9 12:24:51 | 只看该作者
1. 是的,三个维度的上限。(下限默认为1)
2. size(k,2) 是 k 数组第二个维度的大小。(上限-下线+1)
同理,size(k,3) 是 k 数组第三个维度的大小。
3. write(*,*) k 即可输出所有的 k 值。单独输出某一个,用 k(某个,某个,某个)

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
8#
 楼主| 发表于 2021-12-9 21:24:10 | 只看该作者
vvt 发表于 2021-12-9 12:24
1. 是的,三个维度的上限。(下限默认为1)
2. size(k,2) 是 k 数组第二个维度的大小。(上限-下线+1)
同 ...

您好,我还有一个问题,在这个地方我得到了三维K数组后,应该为K(2,999,999)或K(2,x,y)。然后我需要调用x,y数值相同时的k(1,x,y)与k(2,x,y)的数值组成一个新的二元数组,进行后续的计算,在整个过程中需要对所有的x,y值的组合得到的新数组进行计算。
那这个地方在程序实现的时候,我是可以再次使用一个forall来实现双循环得到新数组吗?可不可以我在一开始使用forall循环对赋值k数组的时候就调用每一个k数组,如k(:,x,y),应该就对应上面的二元数组,进行后续的计算,最后得到每一个新数组对应的结果后结束循环呢。谢谢

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-19 19:19

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表