sqs 发表于 2021-11-25 21:12:24

Unclassifiable statement 错误

本帖最后由 sqs 于 2021-11-25 21:14 编辑

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


necrohan 发表于 2021-11-26 08:22:16

k声明为变量没有声明为二维数组,不能当数组用
(x/n)b1里,b1前缺运算符
两个整数除法会自动取整,可能你要的是x*1.0/n
b1,b2都是有2个元素的数组,如果不指定元素,计算结果也是2个元素的数组

sqs 发表于 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矩阵的指标)
大佬看能有什么办法嘛

胡文刚 发表于 2021-11-26 22:28:55

本帖最后由 胡文刚 于 2021-11-26 22:44 编辑

这样是你想要的吗?

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

sqs 发表于 2021-11-28 10:44:07

胡文刚 发表于 2021-11-26 22:28
这样是你想要的吗?

Program workfile


是的是的,十分感谢您了

sqs 发表于 2021-12-8 21:09:15

胡文刚 发表于 2021-11-26 22:28
这样是你想要的吗?

Program workfile


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

vvt 发表于 2021-12-9 12:24:51

1. 是的,三个维度的上限。(下限默认为1)
2. size(k,2) 是 k 数组第二个维度的大小。(上限-下线+1)
同理,size(k,3) 是 k 数组第三个维度的大小。
3. write(*,*) k 即可输出所有的 k 值。单独输出某一个,用 k(某个,某个,某个)

sqs 发表于 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),应该就对应上面的二元数组,进行后续的计算,最后得到每一个新数组对应的结果后结束循环呢。谢谢

页: [1]
查看完整版本: Unclassifiable statement 错误