我正在尝试实现与代码的最后一行相同的目标,但是在我的代码中可以看到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/)
答案 0 :(得分:1)
CURV_KVEC%KNOTS(knot)
是一个数组元素,一个标量。 (/0.d0/)
表示长度为1的数组。这些不一样......
简单写作
CURV_KVEC%KNOTS(knot) = 0.d0
会做到这一点。
答案 1 :(得分:0)
等同于两个阵列,左侧和右侧的阵列必须具有相同的形状。这里,1D阵列只是意味着它们具有相同的长度。由于左侧的运行时确定长度为CURV_KVEC%LENGTH + 1
,因此您无法在右侧使用固定长度的常量数组。
如果您希望LHS上阵列的所有元素具有相同的值,则可以使用右侧的缩放器,如@Alexander Vogt所建议的那样,该值将广播到阵列。我正在将示例代码解释为您需要不同的值。如果您想要相同的值,这是最佳解决方案。