繁体   English   中英

数组表达式的形状不符合Fortran 90

[英]The shapes of the array expressions do not conform, Fortran 90

我正在尝试实现与代码的最后一行所实现的目标相同的目标,但是要实现一个可以在我的代码中看到的do循环。 问题是,当我尝试使用以下命令形成循环时

CURV_KVEC%KNOTS(knot)=(/0.d0/)

我得到一个错误

The shapes of the array expressions do not conform. 

任何帮助将不胜感激! 谢谢。

cdegree=2 
count=5

do knot=0,cdegree+count
if (knot.le.cdegree) then
    CURV_KVEC%KNOTS(knot)=0.d0
    test(knot+1)=0.d0
elseif (knot.ge.count) then
    test(knot+1)=1.d0
    CURV_KVEC%KNOTS(knot)=1.d0   
elseif(nvec.eq.0) then
    num=num+1
    do kn=1,cdegree
       CURV_KVEC%KNOTS(knot+kn-1)=0.5d0  !dble(num)/(dble(count-cdegree-1)/dble(cdegree)+1.d0)
        test(knot+kn)=0.5d0  !dble(num)/(dble(count-cdegree-1)/dble(cdegree)+1.d0)
        nvec=cdegree-1
    enddo
elseif(nvec.ne.0) then 
    nvec=nvec-1
endif
write(14,*)knot,num,nvec,test(knot+1)
enddo    

! CURV_KVEC%KNOTS(0:CURV_KVEC%LENGTH) = (/0.D0,0.D0,0.D0,0.5d0,0.5d0,1.d0,1.d0,1.d0/)

CURV_KVEC%KNOTS(knot)是一个数组元素,一个标量。 (/0.d0/)表示长度为1的数组。这些不是同一件事...

简单地写

CURV_KVEC%KNOTS(knot) = 0.d0

会成功的

相等于两个阵列,左侧和右侧的阵列必须具有相同的形状。 在这里,一维数组仅表示它们具有相同的长度。 由于左侧的运行时确定长度为CURV_KVEC%LENGTH + 1 ,因此您不能在右侧使用固定长度的常数数组。

如果希望LHS上数组的所有元素都具有相同的值,则可以使用@Alexander Vogt建议的在右侧使用缩放器,并将该值广播到数组。 我将示例代码解释为您想要不同的值。 如果您想要相同的值,这是最好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM