我刚开始学习PSSE模型写作。作为一个起点,我尝试在Programe Operation Manuel页面21-16中编译PSSE示例,并得到以下错误。我用的是环境。经理,似乎Microsoft visual studio 2010和Intel visual fortran 15.0的所有路径和库都设置正确。我还将PATH设置为PSSBIN文件夹,将LIB设置为PSSLIB。任何人都可以建议我哪里出错了?
The model code:
SUBROUTINE DEMOEX(I,ISLOT)
C
INCLUDE 'COMON4.INS'
C
INTEGER I,ISLOT
C
C I = MACHINE ARRAY INDEX
C ISLOT = ARRAY ALLOCATION TABLE INDEX
C J = STRTIN(1,ISLOT) [ USES CON(J) THROUGH CON(J+2) ]
C K = STRTIN(2,ISLOT) [ USES STATE(K) AND STATE(K+1) ]
C
INTRINSIC MAX, ABS
EXTERNAL BADMID, DOCUHD
C
INTEGER IB, J, K, IBUS, JJ
REAL VERROR
LOGICAL NEW
CHARACTER IM*2
C
IF (MODE.EQ.8)
. CON_DSCRPT(1)='Tr'
. CON_DSCRPT(2)='K'
. CON_DSCRPT(3)='Te'
. RETURN
...FIN
C
C GET STARTING 'CON' AND 'STATE' INDICES
C
J=STRTIN(1,ISLOT)
K=STRTIN(2,ISLOT)
C
IF (MODE .GT. 4) GO TO 1000
C
C BUS SEQUENCE NUMBER NEGATIVE IF MACHINE
C IS OFF-LINE, SVS OR INDUCTION MACHINE
C
IB=NUMTRM(I)
IF (IB.LE.0) RETURN
C
IF (MIDTRM) GO TO 900
GO TO (100,200,300,400), MODE
C
C MODE = 1 - INITIALIZE
C
100 STATE(K)=ECOMP(I)
STATE(K+1)=EFD(I)
VREF(I)=ECOMP(I) + EFD(I)/CON(J+1)
IF (EFD(I).LT.0.) WRITE(LPDEV,307) NUMBUS(IB),MACHID(I)
RETURN
C
C MODE = 2 - CALCULATE DERIVATIVES
C
200 DSTATE(K)=(ECOMP(I)-STATE(K))/CON(J)
VERROR=VREF(I)+VOTHSG(I)-STATE(K)
DSTATE(K+1)=(CON(J+1)*VERROR-STATE(K+1))/CON(J+2)
RETURN
C
C MODE = 3 - SET EFD
C
300 EFD(I)=MAX(STATE(K+1),0.)
RETURN
C
C MODE = 4 - SET NINTEG
C
400 NINTEG=MAX(NINTEG,K+1)
RETURN
C
C MODE > 4
C
1000 IM=MACHID(I)
IB=ABS(NUMTRM(I))
IBUS=NUMBUS(IB)
C
IF (MODE.EQ.6) GO TO 2000
C
TO PRINT-HEADING
C .
. UNLESS (NEW)
. . NEW=.TRUE.
. . CALL DOCUHD(*1900)
. . WRITE(IPRT,97) IBUS,IM
. ...FIN
C .
...FIN
END
2000 END
错误消息:
ifort /nologo /assume:buffered_io /traceback /libs:dll /threads /c /Qip /extend_source:132 /noaltparam
/fpscomp:logicals /Qprec /warn:nodeclarations /warn:unused /warn:truncated_source /Qauto /fp:source /iface:cvf
/define:DLLI /include:"C:\Program Files (x86)\PTI\PSSE33\PSSLIB" /object:"D:\IVF15test\DEMOEX.obj"
/module:"D:\IVF15test" "D:\IVF15test\DEMOEX.f"
D:\IVF15test\DEMOEX.f(10): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: BLOCK
PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX TYPE BYTE CHARACTER CLASS ...
IF (MODE.EQ.8)
------------------------^
D:\IVF15test\DEMOEX.f(11): error #5082: Syntax error, found '.' when expecting one of: <LABEL>
<END-OF-STATEMENT> ; BLOCK PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX ...
. CON_DSCRPT(1)='Tr'
----------^
D:\IVF15test\DEMOEX.f(12): error #5082: Syntax error, found '.' when expecting one of: <LABEL>
<END-OF-STATEMENT> ; BLOCK PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX ...
. CON_DSCRPT(2)='K'
----------^
D:\IVF15test\DEMOEX.f(13): error #5082: Syntax error, found '.' when expecting one of: <LABEL>
<END-OF-STATEMENT> ; BLOCK PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX ...
. CON_DSCRPT(3)='Te'
----------^
D:\IVF15test\DEMOEX.f(14): error #5082: Syntax error, found '.' when expecting one of: <LABEL>
<END-OF-STATEMENT> ; BLOCK PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX ...
. RETURN
----------^
D:\IVF15test\DEMOEX.f(15): error #5082: Syntax error, found '.' when expecting one of: <LABEL>
<END-OF-STATEMENT> ; BLOCK PROGRAM BLOCKDATA MODULE INTEGER REAL COMPLEX ...
...FIN
----------^
D:\IVF15test\DEMOEX.f(18): error #5149: Illegal character in statement label field [I]
IF (MODE .GT. 4) GO TO 1000
^
D:\IVF15test\DEMOEX.f(18): error #5149: Illegal character in statement label field [F]
IF (MODE .GT. 4) GO TO 1000
-^
D:\IVF15test\DEMOEX.f(18): error #5149: Illegal character in statement label field [(]
IF (MODE .GT. 4) GO TO 1000
---^
D:\IVF15test\DEMOEX.f(18): error #5149: Illegal character in statement label field [M]
IF (MODE .GT. 4) GO TO 1000
----^
D:\IVF15test\DEMOEX.f(18): error #5276: Unbalanced parentheses
IF (MODE .GT. 4) GO TO 1000
---------------^
D:\IVF15test\DEMOEX.f(15): catastrophic error: Could not recover from previous syntax error
compilation aborted for D:\IVF15test\DEMOEX.f (code 1)
答案 0 :(得分:1)
最好使用fortran编写代码...但是,您没有完成pom.pdf第21.9节中的flex代码...我用flex语言完成了代码,现在可以编译时没有错误,但有警告(某些声明的变量代码未使用等),我不确定它在psse环境中是否可以正常工作...
C
C[UEXC] 05/23/02 EXAMPLE USER EXCITATION SYSTEM MODEL
C
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
C * *
C * THIS PROGRAM AND ITS DOCUMENTATION ARE TRADE SECRETS OF POWER TECHNO- *
C * LOGIES, A DIVISION OF S&W CONSULTANTS, INC. THEY HAVE BEEN LEASED TO *
C * YOU, OUR CLIENT, *
C * SUBJECT TO TERMS WHICH PROHIBIT YOU FROM DISCLOSING OR TRANSFERRING *
C * THE PROGRAM OR ITS DOCUMENTATION, WHETHER IN ITS ORIGINAL OR MODIFIED *
C * FORM, TO A THIRD PARTY, OR FROM USING THE PROGRAM FOR ANY PURPOSE *
C * OTHER THAN COMPUTATION RELATING TO YOUR OWN SYSTEM. ANY SUCH *
C * TRANSFER OR USE BY YOU OR YOUR EMPLOYEES WILL CONSTITUTE A BREACH OF *
C * CONFIDENCE AND OF THE CONTRACT UNDER WHICH RIGHTS OF USE HAVE BEEN *
C * GRANTED. *
C * *
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
C
SUBROUTINE UEXC(IARG,ISLOT)
C
C THIS IS A SIMPLIFIED EXAMPLE EXCITATION SYSTEM MODEL
C
C SUBROUTINE UEXC
C IARG = MACHINE ARRAY INDEX
C ISLOT = ARRAY ALLOCATION TABLE INDEX
C J = STRTIN(1,ISLOT) [ USES CON(J) THROUGH CON(J+8) ]
C K = STRTIN(2,ISLOT) [ USES STATE(K) AND STATE(K+3) ]
C
C USE DYNAMICS, ONLY: NUMTRM, STRTIN,
C * EFD,
C * ECOMP, VOTHSG, VREF,
C * VUEL, VOEL,
C * CON, VAR,
C * STORMT, STATE, DSTATE, STORE
C USE PSSCM4, ONLY: NUMBUS, BASVLT,
C * BUSNAM,
C * MACHID
C
C$INCLUDE PERM4.INS
C$INCLUDE DSCOM4.INS
$INSERT COMON4.INS
C
INTEGER IARG, ISLOT
C
C INTRINSIC MAX
EXTERNAL BADMID
C
INTEGER I, J, K, JJ, KK,
* IB, IBUS, IBPTR
REAL VERROR, VR, DEL2, FDBK, SS, R_TF_KF
LOGICAL HIGH, LOW, NEW
CHARACTER CB1*6, CB2*6
CHARACTER IM*2, VLTI*4
C
IF (MODE.EQ.8) GO TO 1500 ! GET DATA DESCRIPTIONS
I=IARG ! MACHINE ARRAY INDEX
J=STRTIN(1,ISLOT) ! STARTING 'CON'
K=STRTIN(2,ISLOT) ! STARTING 'STATE'
C
IF (MODE.GT.4) GO TO 1000
C
IB=NUMTRM(I) ! RETURN IF OFF-LINE
IF (IB.LE.0) RETURN ! OR SVS OR INDUCTION MACHINE
$1
C
C MODEL NOT IMPLEMENTED FOR MSTR/MRUN
C
IF (MIDTRM)
. CALL BADMID(I,IB,'UEXC')
. RETURN
...FIN
C
C MODE 2 - CALCULATE DERIVATIVES
IF (MODE.EQ.2) ! CALCULATE DERIVATIVES
C .
. WHEN (MIDTRM) ! MODE 2 Z-FORM
C . the midterm simulation mode is not implemented
C . .
C . .
. ...FIN
$1
. ELSE ! STATE SPACE
C . MODE 2 code portion is inserted here
C .
. . HIGH=STATE(K+1).GE.CON(J+3)
C .
. . WHEN (HIGH)
. . . STATE(K+1)=CON(J+3)
. . . STORE(K+1)=CON(J+3)
. . ...FIN
. . ELSE
. . . LOW=STATE(K+1).LE.CON(J+4)
C . . .
. . . IF (LOW)
. . . . STATE(K+1)=CON(J+4)
. . . . STORE(K+1)=CON(J+4)
. . . ...FIN
C . . .
. . ...FIN
C . .
C . . HANDLING SMALL TIME CONSTANTS
. . DEL2=2.*DELT
C . .
. . WHEN (CON(J).LE.DEL2)
. . . STORE(K)=ECOMP(I)
. . . STATE(K)=ECOMP(I)
. . ...FIN
. . ELSE DSTATE(K)=(ECOMP(I)-STATE(K))/CON(J)
C . .
. . DSTATE(K+2)=(STATE(K+1)/CON(J+5)-STATE(K+2))*CON(J+5)/CON(J+6)
C . .
. . FDBK=STATE(K+2)*CON(J+7)/CON(J+8)-STATE(K+3) ! FEEDBACK BLOCK OUTPUT
. . DSTATE(K+3)=FDBK/CON(J+8)
C . .
C . . TEMPORARY VARIABLE SS
. . SS=(VREF(I)+VOTHSG(I)-STATE(K)-FDBK)*CON(J+1)
C . .
. . WHEN (CON(J+2).LE.DEL2)
. . . STORE(K+1)=SS
. . . STATE(K+1)=SS
. . ...FIN
. . ELSE
. . . DSTATE(K+1)=(SS-STATE(K+1))/CON(J+2)
C . . .
. . . CONDITIONAL
. . . . (HIGH) IF (DSTATE(K+1).GT.0.) DSTATE(K+1)=0.
. . . . (LOW) IF (DSTATE(K+1).LT.0.) DSTATE(K+1)=0.
. . . ...FIN
C . . .
. . ...FIN
C . .
. ...FIN
C .
. RETURN
...FIN
$1
C MODE 3 - SET EFD
IF (MODE.EQ.3)
C .
. WHEN (MIDTRM) ! RESET STORES FOR CHANGE
C . the midterm simulation mode is not implemented
C . . ! IN DELT (MIDTERM)
C . .
. ...FIN
. ELSE EFD(I)=STATE(K+2) ! STATE SPACE
C . MODE 3 code portion is inserted here
C .
. RETURN
...FIN
$1
C MODE 1 - INITIALIZATION
IF (MODE.EQ.1) ! INITIALIZE
. WHEN (MIDTRM)
C . the midterm simulation mode is not implemented
C . .
C . .
. ...FIN
. ELSE
C . MODE 1 code portion is inserted here
C . . TEMPORARY VARIABLE SS
. . SS=CON(J+5)*EFD(I)
. . VREF(I)=ECOMP(I)+SS/CON(J+1)
C . .
. . IF (SS.GE.CON(J+3) .OR. SS.LE.CON(J+4))
. . . WRITE(LPDEV,307) NUMBUS(IB),MACHID(I)
. . ...FIN
C . .
. . STATE(K)=ECOMP(I)
. . STATE(K+1)=SS
. . STATE(K+2)=EFD(I)
. . STATE(K+3)=EFD(I)*CON(J+7)/CON(J+8)
. ...FIN
C .
. RETURN
...FIN
C
C MODE 4 -SET NINTEG
C MODE 4 code portion is inserted here
IF (K+3.GT.NINTEG) NINTEG=K+3
RETURN
$1
C MODE > 4
C
1000 IM=MACHID(I)
IB=ABS(NUMTRM(I))
IBUS=NUMBUS(IB)
C
IF (MODE.EQ.6) GO TO 2000
C
C MODE 5 OR 7 - ACTIVITY DOCU
C
IF (MODE.EQ.5)
. CALL DOCUHD(*1900)
. GO TO 1100
...FIN
C
$1
C DATA CHECKING CODE
C
C code portion # 1 for DOCU checking mode is inserted here
NEW=.FALSE.
DEL2=2.*DELT
C
UNLESS (CON(J).GT.0. .AND. CON(J).LE.5.0) ! TR
. PRINT-HEADING
. WRITE(IPRT,107) CON(J)
...FIN
C
UNLESS (CON(J+1).GE.10. .AND. CON(J+1).LE.500.0) ! KA
. PRINT-HEADING
. WRITE(IPRT,108) CON(J+1)
...FIN
C
UNLESS (CON(J+2).GT.0. .AND. CON(J+2).LE.1.0) ! TA
. PRINT-HEADING
. WRITE(IPRT,109) CON(J+2)
...FIN
C
UNLESS (CON(J+3).GE.0.5 .AND. CON(J+3).LE.10.0) ! VRMAX
. PRINT-HEADING
. WRITE(IPRT,110) CON(J+3)
...FIN
C
UNLESS (CON(J+4).GE.-10.0 .AND. CON(J+4).LE.0.) ! VRMIN
. PRINT-HEADING
. WRITE(IPRT,111) CON(J+4)
...FIN
C
UNLESS (CON(J+5).GE.-1.0 .AND. CON(J+5).LE.1.0) ! KE
. PRINT-HEADING
. WRITE(IPRT,112) CON(J+5)
...FIN
C
UNLESS (CON(J+6).GT.DEL2 .AND. CON(J+6).LE.1.0) ! TE
. PRINT-HEADING
. WRITE(IPRT,113) CON(J+6)
...FIN
C
UNLESS (CON(J+7).GE.0. .AND. CON(J+7).LE.0.3) ! KF
. PRINT-HEADING
. WRITE(IPRT,114) CON(J+7)
...FIN
C
UNLESS (CON(J+8).GT.DEL2 .AND. CON(J+8).LE.1.5) ! TF
. PRINT-HEADING
. WRITE(IPRT,115) CON(J+8)
...FIN
C
R_TF_KF=CON(J+8)/CON(J+7)
UNLESS (R_TF_KF.GE.5.0 .AND. R_TF_KF.LE.15.0) ! RATIO TF/KF
. PRINT-HEADING
. WRITE(IPRT,116) R_TF_KF
...FIN
C
C (DATA CHECKING PERFORMED FOR ALL CONS)
C
UNLESS (NEW) RETURN
C
C DATA TABULATION CODE
C
1100 JJ=J+8
KK=K+3
C
CALL VLTFOR(VLTI,BASVLT(IB))
IBPTR = 0
CALL ADINTN (JJ,CB1,IBPTR)
IBPTR = 0
CALL ADINTN (KK,CB2,IBPTR)
WRITE(IPRT,17) IBUS,BUSNAM(IB),VLTI,IM,J,CB1,K,CB2
WRITE(IPRT,27) (CON(K),K=J,JJ)
C
1900 RETURN
C
C MODE 6 - ACTIVITY DYDA
C
2000 WRITE(IPRT,507) IBUS,IM,(CON(K),K=J,J+8)
RETURN
$1
C MODE 8 - ASSIGN DESCRIPTIONS FOR DATA EDITOR
C
C MODE 8 code portion is inserted here
1500 CON_DSCRPT(1) ='TR'
CON_DSCRPT(2) ='KA'
CON_DSCRPT(3) ='TA'
CON_DSCRPT(4) ='VRMAX'
CON_DSCRPT(5) ='VRMIN'
CON_DSCRPT(6) ='KE'
CON_DSCRPT(7) ='TE'
CON_DSCRPT(8) ='KF'
CON_DSCRPT(9) ='TF'
RETURN
$1
C
C a code portion for DOCU report is inserted here
17 FORMAT(//6X,'** UEXC',' ** BUS NAME BSKV MACH',
* ' C O N S S T A T E S'/,
* I23,1X,A8,1X,A4,2X,A2,1X,2(I7,'-',A6))
27 FORMAT(/5X,'TR KA TA VRMAX VRMIN KE TE',
* ' KF TF'/
* 3X,F5.3,F8.2,2F7.3,2F8.3,3F7.3)
97 FORMAT(//' BUS',I7,' MACHINE ',A,':')
C
C code portion # 2 for DOCU checking mode (messages) is inserted here
C DOCU CHECKING MESSAGES
107 FORMAT(' TR=',F15.4)
108 FORMAT(' KA=',F15.4)
109 FORMAT(' TA=',F15.4)
110 FORMAT(' VRMAX=',F15.4)
111 FORMAT(' VRMIN=',F15.4)
112 FORMAT(' KE=',F15.4)
113 FORMAT(' TE=',F15.4)
114 FORMAT(' KF=',F15.4)
115 FORMAT(' TF=',F15.4)
116 FORMAT(' RATIO TF/KF=',F15.4)
C
307 FORMAT(' UEXC AT BUS',I7,' MACHINE ',A,
* ' INITIALIZED OUT OF LIMITS')
C a code portion for DYDA record is inserted here
507 FORMAT(I6,' ''USRMDL''',2X,A2,' ''UEXC''',1X,4G13.5,/7X,5G13.5,'/')
$1
TO PRINT-HEADING
C .
. UNLESS (NEW)
. . NEW=.TRUE.
. . CALL DOCUHD(*1900)
. . WRITE(IPRT,97) IBUS,IM
. ...FIN
C .
...FIN
C
END
(FLECS Version 22.60 - PTI)
----------------------------------------
答案 1 :(得分:0)
这不是 Fotran 代码,而是 Flex 代码。您必须将此代码转换为Fortran。