本人在做PSCAD(电力仿真软件)模型的仿真,元件程序用的是fortran语言,这里是一个排序的程序,但是初学fortran,出现了一些语法错误,希望大佬们指点 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode     
      #STORAGE INTEGER:$(DimIdx)+1
      REAL allocatable::frr(:)
这里就是想声明一个动态数组,其实我也不知道是不是该用动态数组,数组的大小是随输入参数变的
      #LOCAL INTEGER i,j,k,mystore,in_last
      allocate(frr($DimIdx))
这里就是分配动态数组的空间,$DimIdx在PSCAD里就是输入的参数
       mystore=NSTORI
PSCAD用STORI存储序列,NSTORI就是这个序列的序号而已
        in_last=STORI(mystore)   
将上一仿真步长的输入(一个整数)给变量in_last
       IF ($In>STORI(mystore))THEN
        j=0
        k=$DimIdx-STORI(mystore)
       DO i=1,$DimIdx
        IF(STORI(mystore+i) .EQ. 0)  THEN
         frr(j)=$Vcap(i)
         j=j+1
        ELSE
          frr(k)=$Vcap(i)
          k=k+1
        ENDIF
       END DO
根据存储序列中第2到$DimIdx+1个数的值(上一仿真步长的触发信号,不是0就是1)将输入的数组重新排列(上一周期是触发信号是0的放在一起,是1的放在一起)
        IF ($Iac>=0)  THEN
         CALL idcdd_sort(frr,$DimIdx,$DimIdx-STORI(mystore)-1,$In-STORI(mystore),$Indx)
        ELSE
         CALL ixcdd_sort(frr,$DimIdx,$DimIdx-STORI(mystore)-1,$In-STORI(mystore),$Indx)
        ENDIF
这里就是调用C函数了,C函数都已经在文件里写好了,下面的elseif 和else 与之前的相似,不再做过多说明
       ELSEIF ($In .EQ. STORI(mystore)) THEN
        j=0
        k=$DimIdx-STORI(mystore)
       DO i=1,$DimIdx
         IF(STORI(mystore+i) .EQ. 0)  THEN
          frr(j)=$Vcap(i)
          j=j+1
         ELSE
          frr(k)=$Vcap(i)
          k=k+1
         ENDIF
       END DO
         IF ($Iac>=0)  THEN
           CALL idcde_sort(frr,$DimIdx,$DimIdx-STORI(mystore)-1,$Indx)
         ELSE
           CALL ixcde_sort(frr,$DimIdx,$DimIdx-STORI(mystore)-1,$Indx)
         ENDIF
      ELSE
        j=0
        k=STORI(mystore)
        DO i=1,$DimIdx
         IF(STORI(mystore+i) .EQ. 1)  THEN
          frr(j)=$Vcap(i)
          j=j+1
         ELSE
          frr(k)=$Vcap(i)
          k=k+1
         ENDIF
        END DO
      IF ($Iac>=0)  THEN
      CALL idcdx_sort(frr,$DimIdx,STORI(mystore)-1,STORI(mystore)-$In,$Indx)
      ELSE
      CALL ixcdx_sort(frr,$DimIdx,STORI(mystore)-1,STORI(mystore)-$In,$Indx)
      ENDIF
      ENDIF
      NSTORI = NSTORI+1+$DimIdx
      #LOCAL INTEGER Ki
      DO Ki=1,$DimIdx
       STORI(mystore+Ki) = $Indx(Ki)
      END DO
这里是将此时的触发序列存入存储序列,供下一仿真步长使用
      STORI(mystore) = $In
这里是将此时的输入存入存储序列 
运行出现了以下错误 
Description 
REAL allocatable::frr(:) 
Error: Syntax error in data declaration at (1) 
 
Description 
Ammc.f:893.18: 
allocate(frr(200)) 
Error: Syntax error in ALLOCATE statement at (1) 
 
Description 
Ammc.f:901.22: 
frr(j)=VcB(i) 
Error: Unexpected STATEMENT FUNCTION statement at (1) 
 
 
 
问题总结:1是否要用动态数组? 
2我的数组声明语句是不是错了,怎么改 
3还有其他什么错误 
大佬们,帮我解决一下,万分感谢!!! 
 |