Fortran Fortran: specification statement cannot appear in the executable section

  • Thread starter Thread starter Peptid
  • Start date Start date
  • Tags Tags
    Fortran Section
AI Thread Summary
The Fortran code compilation error arises from a specification statement appearing in the executable section, specifically with the BLOCK DATA statement located after executable code. The user attempted to compile multiple Fortran files but encountered an error indicating that the structure of the code is incorrect, as it contains multiple entry points instead of a single main program. The BLOCK DATA statement should be positioned immediately after declarations, not after any executable statements. Adjustments were made to the code structure to adhere to Fortran's requirements, ensuring that only one main program exists and that the BLOCK DATA statement is properly placed. The user is now seeking confirmation that these changes resolve the compilation issue.
Peptid
Messages
4
Reaction score
0
Hi guys,

I am working on a Fortran code for a while. Might seem ridiculous but to better trace it, I split code into three separate parts and trying to compile both using the command 'ifort ss.f singpot.f SNGPOT.f -o ss'. With this command I receive the error

singpot.f(22): error #6236: A specification statement cannot appear in the executable section.
BLOCK DATA SPOT
------^
compilation aborted for singpot.f (code 1). Does anyone has an idea why would that happen?

By the way, since I still couldn't go further the compilation step, I am still not sure if the program works just in the way that I suppose.

This is singpot.f COMMON/VSNGLT/RNODE(88),VNODE(88)
COMMON/VSPLIN/BPAR(4),SPLC(87,3)

C
DO 1200 I=1,4
1200 BPAR(I)=0.d0
CONTINUE
CALL ICSICU(RNODE,VNODE,88,BPAR,SPLC,87,IER)
C
BLOCK DATA SPOT
C implicit real*8 (a-h,o-z)
c
C common/vsnglt/rnode(88),vnode(88)
data(rnode(i),i=1,88)/0.d0,0.4d0,0.45d0,0.5d0,
1 0.55d0,0.60d0,0.65d0,0.7d0,0.75d0,0.8d0,0.9d0,1.0d0,
2 1.1d0,1.2d0,1.3d0,1.35d0,1.39d0,1.4d0,1.401d0,1.4011d0,
31.41d0,1.45d0,1.5d0,1.6d0,1.7d0,1.8d0,1.9d0,2.0d0,
42.1d0,2.2d0,2.3d0,2.4d0,2.5d0,2.6d0,2.7d0,2.8d0,2.9d0,3.0d0,
53.1d0,3.2d0,3.3d0,3.4d0,3.5d0,3.6d0,3.7d0,3.8d0,3.9d0,4.0d0,
64.1d0,4.2d0,4.3d0,4.4d0,4.5d0,4.6d0,4.7d0,4.8d0,4.9d0,5.0d0,
75.1d0,5.2d0,5.3d0,5.4d0,5.5d0,5.6d0,5.7d0,5.8d0,5.9d0,6.0d0,
86.1d0,6.2d0,6.3d0,6.4d0,6.5d0,6.6d0,6.7d0,6.8d0,6.9d0,7.0d0,
97.2d0,7.4d0,7.6d0,7.8d0,8.d0,8.25d0,8.5d0,9.d0,9.5d0,10.d0/
data(vnode(i),i=1,77)/2.5d0,
10.8797972d0,0.6490718d0,0.4733730d0,0.3372293d0,
20.2303659d0,0.1456386d0,0.0779739d0,0.0236643d0,
3-0.0200556d0,-0.0836422d0,-0.1245385d0,-0.1500562d0,
4-0.1649342d0,-0.1723459d0,-0.1739627d0,-0.1744517d0,
5-0.1744744d0,-0.1744746d0,-0.1744746d0,-0.1744599d0,
6-0.1740558d0,-0.1728537d0,-0.1685799d0,-0.1624570d0,
7-0.1550670d0,-0.1468496d0,-0.1381312d0,-0.1291562d0,
8-0.1201233d0,-0.1111725d0,-0.1024127d0,-0.0939273d0,
9-0.0857810d0,-0.0780164d0,-0.0706700d0,-0.0637641d0,
#-0.0573118d0,-0.0513185d0,-0.0457832d0,-0.0407003d0,
#-0.0360578d0,-0.0318402d0,-0.0280272d0,-0.0245978d0,
#-0.0215297d0,-0.0187967d0,-0.0163689d0,-0.0142247d0,
#-0.0123371d0,-0.0106810d0,-0.0092303d0,-0.0079682d0,
#-0.0068703d0,-0.0059178d0,-0.0050923d0,-0.0043782d0,
#-0.0037626d0,-0.0032309d0,-0.0027740d0,-0.0023800d0,
#-0.0020423d0,-0.0017521d0,-0.0015030d0,-0.0012899d0,
#-0.0011069d0,-0.0009498d0,-0.0008150d0,-0.0007002d0,
#-0.0006030d0,-0.0005162d0,-0.0004466d0,-0.0003864d0,
#-0.0003328d0,-0.0002906d0,-0.0002466d0,-0.0002154d0/
data (vnode(i),i=78,88)/-0.001889d0,-0.0001434d0,
1-0.0001086d0,-0.0000868d0,-0.0000682d0,-0.0000528d0,
2-0.0000404d0,-0.0000314d0,-0.0000185d0,-0.0000121d0,
3-0.0000091d0/
End

subroutine ICSICU (X,Y,NX,BPAR,C,IC,IER)
INTEGER NX,IC,IER
real*8 X(NX),Y(NX),BPAR(4),C(IC,3)
INTEGER I,J,NXM1
real*8 DX,DXJ,DXJP1,DXP,DYJ,DYJP1,HALF,ONE,PJ,
1 SIX,SIXI,TWO,YPPA,YPPB,ZERO
EQUIVALENCE (DXJ,YPPB),(PJ,SIXI),(DXJP1,YPPA)
DATA ZERO/0.0d0/,HALF/0.5d0/,ONE/1.0d0/,
1 TWO/2.0d0/,SIX/6.0d0/
C FIRST EXECUTABLE STATEMENT
IER = 0
C CHECK ERROR CONDITIONS
NXM1 = NX-1
IF (IC .LT. NXM1) GO TO 30
IF (NX .LT. 2) GO TO 35
IF (NX .EQ. 2) GO TO 10
C COMPUTE COEFFICIENTS AND RIGHT
C HAND SIDE OF THE TRIDIAGONAL
C SYSTEM DEFINING THE SECOND
C DERIVATIVES OF THE SPLINE
C INTERPOLANT FOR (X,Y)
C C(J,1) = LAMBDA(J)
C C(J,2) = MU(J)
C C(J,3) = D(J)
DXJ = X(2)-X(1)
IF (DXJ .LE. ZERO) GO TO 40
DYJ = Y(2)-Y(1)
DO 5 J=2,NXM1
DXJP1 = X(J+1)-X(J)
IF (DXJP1 .LE. ZERO) GO TO 40
DYJP1 = Y(J+1)-Y(J)
DXP = DXJ+DXJP1
C(J,1) = DXJP1/DXP
C(J,2) = ONE-C(J,1)
C(J,3) = SIX*(DYJP1/DXJP1-DYJ/DXJ)/DXP
DXJ = DXJP1
DYJ = DYJP1
5 CONTINUE
C FACTOR THE TRIDIAGONAL MATRIX
C AND SOLVE FOR U
C C(J,2) = U(J)
C C(J,1) = Q(J)
C BPAR(1) = LAMBDA(1)
C BPAR(2) = D(1)
C BPAR(3) = MU(NX)
C BPAR(4) = D(NX)
10 C(1,1) = -BPAR(1)*HALF
C(1,2) = BPAR(2)*HALF
IF (NX .EQ. 2) GO TO 20
DO 15 J=2,NXM1
PJ = C(J,2)*C(J-1,1)+TWO
C(J,1) = -C(J,1)/PJ
C(J,2) = (C(J,3)-C(J,2)*C(J-1,2))/PJ
15 CONTINUE
C SOLVE FOR CUBIC COEFFICIENTS
C OF SPLINE INTERPOLANT
C C(J,1), C(J,2), AND C(J,3)
20 YPPB = (BPAR(4)-BPAR(3)*C(NXM1,2))/(BPAR(3)*C(NXM1,1)+TWO)
SIXI = ONE/SIX
DO 25 I=1,NXM1
J = NX-I
YPPA = C(J,1)*YPPB+C(J,2)
DX = X(J+1)-X(J)
C(J,3) = SIXI*(YPPB-YPPA)/DX
C(J,2) = HALF*YPPA
C(J,1) = (Y(J+1)-Y(J))/DX-(C(J,2)+C(J,3)*DX)*DX
YPPB = YPPA
25 CONTINUE
GO TO 9005
30 IER = 129
GO TO 9000
35 IER = 130
GO TO 9000
40 IER = 131
9000 CONTINUE
write(6,29888) ier
29888 format(1x,'imsl err.from ICSICU. ier=',i4)
9005 RETURN
END

subroutine ICSEVU (X,Y,NX,C,IC,U,S,M,IER)
INTEGER NX,IC,M,IER
real*8 X(NX),Y(NX),C(IC,3),U(M),S(M)
INTEGER I,JER,KER,NXM1,K
real*8 D,DD,ZERO
DATA I/1/,ZERO/0.0d0/
C FIRST EXECUTABLE STATEMENT
JER = 0
KER = 0
IF (M .LE. 0) GO TO 9005
NXM1 = NX-1
IF (I .GT. NXM1) I = 1
C EVALUATE SPLINE AT M POINTS
DO 40 K=1,M
C FIND THE PROPER INTERVAL
D = U(K)-X(I)
IF (D) 5,25,15
5 IF (I .EQ. 1) GO TO 30
I = I-1
D = U(K)-X(I)
IF (D) 5,25,20
10 I = I+1
D = DD
15 IF (I .GE. NX) GO TO 35
DD = U(K)-X(I+1)
IF (DD .GE. ZERO) GO TO 10
IF (D .EQ. ZERO) GO TO 25
C PERFORM EVALUATION
20 S(K) = ((C(I,3)*D+C(I,2))*D+C(I,1))*D+Y(I)
GO TO 40
25 S(K) = Y(I)
GO TO 40
C WARNING - U(I) .LT. X(1)
30 JER = 33
GO TO 20
C IF U(I) .GT. X(NX) - WARNING
35 IF (DD .GT. ZERO) KER = 34
D = U(K)-X(NXM1)
I = NXM1
GO TO 20
40 CONTINUE
IER = MAX0(JER,KER)
9000 CONTINUE
if(jer.gt.0) then
write(6,29666) jer
29666 format(1x,'err.mess. from ICSEVU jer=',i4)
end if
if(ker.gt.0) then
write(6,29777) ker
29777 format(1x,'err.mess. from ICSEVU ker=',i4)
end if
9005 RETURN
END

Here is ss.f

C TRYING SNGPOT
COMMON/VSNGLT/RNODE(88),VNODE(88)
COMMON/VSPLIN/BPAR(4),SPLC(87,3)
REAL B
B=SNGPOT(1)
PRINT *,B
END

and finally SNGPOT.f

FUNCTION SNGPOT(X)
IMPLICIT REAL*8 (a-h,o-z)
c
COMMON/VSNGLT/RNODE(88),VNODE(88)
COMMON/VSPLIN/BPAR(4),SPLC(87,3)
DIMENSION Y(1),VY(1)
C
Y(1)=X
CALL ICSEVU(RNODE,VNODE,88,SPLC,87,Y,VY,1,IER)
SNGPOT=VY(1)
RETURN
END

Thank you in advance.
 
Last edited:
Technology news on Phys.org
SNGPOT.f starts with a line that starts with FUNCTION and ends with one that says END...that is fine; every file needs to start and end with that, or SUBROUTINE and END. Only one file, the one with the main program is to start with PROGRAM

...as it is, 2 of your files ( signpot.f and ss.f ) start with nothing at all, which implicitly means that it is the main procedure and equivalent to PROGRAM...in other words, you have two PROGRAMs and that cannot be...there should only one entry point to your program.
 
Oh, and yes...the BLOCK needs to be at the beginning right after declarations...you cannot have it after executable statements like that DO loop.
 
dear gsal, I have made several changes according to your advice. here is the final result;

C SINGLET POTENTIAL OF H2
C by spline interpolation of Kolos-Woniewicz data
C
C Before calling SNGPOT we have to
C INITIALIZE FOR SPLINE INTERPOLATION (THIS IS USED
C ONLY IF KOLOS-WOLNIEWICZ DATA IS USED)
C calling program should have the following common blocks
COMMON/VSNGLT/RNODE(88),VNODE(88)
COMMON/VSPLIN/BPAR(4),SPLC(87,3)
REAL SONUC,X
BLOCK DATA SPOT
c real*8 (a-h,o-z)
c
c common/vsnglt/rnode(88),vnode(88)
data(rnode(i),i=1,88)/0.d0,0.4d0,0.45d0,0.5d0,
1 0.55d0,0.60d0,0.65d0,0.7d0,0.75d0,0.8d0,0.9d0,1.0d0,
2 1.1d0,1.2d0,1.3d0,1.35d0,1.39d0,1.4d0,1.401d0,1.4011d0,
3 31.41d0,1.45d0,1.5d0,1.6d0,1.7d0,1.8d0,1.9d0,2.0d0,
4 42.1d0,2.2d0,2.3d0,2.4d0,2.5d0,2.6d0,2.7d0,2.8d0,2.9d0,3.0d0,
5 53.1d0,3.2d0,3.3d0,3.4d0,3.5d0,3.6d0,3.7d0,3.8d0,3.9d0,4.0d0,
6 64.1d0,4.2d0,4.3d0,4.4d0,4.5d0,4.6d0,4.7d0,4.8d0,4.9d0,5.0d0,
7 75.1d0,5.2d0,5.3d0,5.4d0,5.5d0,5.6d0,5.7d0,5.8d0,5.9d0,6.0d0,
8 86.1d0,6.2d0,6.3d0,6.4d0,6.5d0,6.6d0,6.7d0,6.8d0,6.9d0,7.0d0,
9 97.2d0,7.4d0,7.6d0,7.8d0,8.d0,8.25d0,8.5d0,9.d0,9.5d0,10.d0/
data(vnode(i),i=1,77)/2.5d0,
10.8797972d0,0.6490718d0,0.4733730d0,0.3372293d0,
20.2303659d0,0.1456386d0,0.0779739d0,0.0236643d0,
3-0.0200556d0,-0.0836422d0,-0.1245385d0,-0.1500562d0,
4-0.1649342d0,-0.1723459d0,-0.1739627d0,-0.1744517d0,
5-0.1744744d0,-0.1744746d0,-0.1744746d0,-0.1744599d0,
6-0.1740558d0,-0.1728537d0,-0.1685799d0,-0.1624570d0,
7-0.1550670d0,-0.1468496d0,-0.1381312d0,-0.1291562d0,
8-0.1201233d0,-0.1111725d0,-0.1024127d0,-0.0939273d0,
9-0.0857810d0,-0.0780164d0,-0.0706700d0,-0.0637641d0,
#-0.0573118d0,-0.0513185d0,-0.0457832d0,-0.0407003d0,
#-0.0360578d0,-0.0318402d0,-0.0280272d0,-0.0245978d0,
#-0.0215297d0,-0.0187967d0,-0.0163689d0,-0.0142247d0,
#-0.0123371d0,-0.0106810d0,-0.0092303d0,-0.0079682d0,
#-0.0068703d0,-0.0059178d0,-0.0050923d0,-0.0043782d0,
#-0.0037626d0,-0.0032309d0,-0.0027740d0,-0.0023800d0,
#-0.0020423d0,-0.0017521d0,-0.0015030d0,-0.0012899d0,
#-0.0011069d0,-0.0009498d0,-0.0008150d0,-0.0007002d0,
#-0.0006030d0,-0.0005162d0,-0.0004466d0,-0.0003864d0,
#-0.0003328d0,-0.0002906d0,-0.0002466d0,-0.0002154d0/
data (vnode(i),i=78,88)/-0.001889d0,-0.0001434d0,
1-0.0001086d0,-0.0000868d0,-0.0000682d0,-0.0000528d0,
2-0.0000404d0,-0.0000314d0,-0.0000185d0,-0.0000121d0,
3-0.0000091d0/
End

READ *, XC
C DO 1200 I=1,4
C 1200 BPAR(I)=0.d0
CALL ICSICU(RNODE,VNODE,88,BPAR,SPLC,87,IER)
C
SONUC=SNGPOT(X)

subroutine ICSICU (X,Y,NX,BPAR,C,IC,IER)
INTEGER NX,IC,IER
real*8 X(NX),Y(NX),BPAR(4),C(IC,3)
INTEGER I,J,NXM1
real*8 DX,DXJ,DXJP1,DXP,DYJ,DYJP1,HALF,ONE,PJ,
1 SIX,SIXI,TWO,YPPA,YPPB,ZERO
EQUIVALENCE (DXJ,YPPB),(PJ,SIXI),(DXJP1,YPPA)
DATA ZERO/0.0d0/,HALF/0.5d0/,ONE/1.0d0/,
1 TWO/2.0d0/,SIX/6.0d0/
C FIRST EXECUTABLE STATEMENT
IER = 0
C CHECK ERROR CONDITIONS
NXM1 = NX-1
IF (IC .LT. NXM1) GO TO 30
IF (NX .LT. 2) GO TO 35
IF (NX .EQ. 2) GO TO 10
C COMPUTE COEFFICIENTS AND RIGHT
C HAND SIDE OF THE TRIDIAGONAL
C SYSTEM DEFINING THE SECOND
C DERIVATIVES OF THE SPLINE
C INTERPOLANT FOR (X,Y)
C C(J,1) = LAMBDA(J)
C C(J,2) = MU(J)
C C(J,3) = D(J)
DXJ = X(2)-X(1)
IF (DXJ .LE. ZERO) GO TO 40
DYJ = Y(2)-Y(1)
DO 5 J=2,NXM1
DXJP1 = X(J+1)-X(J)
IF (DXJP1 .LE. ZERO) GO TO 40
DYJP1 = Y(J+1)-Y(J)
DXP = DXJ+DXJP1
C(J,1) = DXJP1/DXP
C(J,2) = ONE-C(J,1)
C(J,3) = SIX*(DYJP1/DXJP1-DYJ/DXJ)/DXP
DXJ = DXJP1
DYJ = DYJP1
5 CONTINUE
C FACTOR THE TRIDIAGONAL MATRIX
C AND SOLVE FOR U
C C(J,2) = U(J)
C C(J,1) = Q(J)
C BPAR(1) = LAMBDA(1)
C BPAR(2) = D(1)
C BPAR(3) = MU(NX)
C BPAR(4) = D(NX)
10 C(1,1) = -BPAR(1)*HALF
C(1,2) = BPAR(2)*HALF
IF (NX .EQ. 2) GO TO 20
DO 15 J=2,NXM1
PJ = C(J,2)*C(J-1,1)+TWO
C(J,1) = -C(J,1)/PJ
C(J,2) = (C(J,3)-C(J,2)*C(J-1,2))/PJ
15 CONTINUE
C SOLVE FOR CUBIC COEFFICIENTS
C OF SPLINE INTERPOLANT
C C(J,1), C(J,2), AND C(J,3)
20 YPPB = (BPAR(4)-BPAR(3)*C(NXM1,2))/(BPAR(3)*C(NXM1,1)+TWO)
SIXI = ONE/SIX
DO 25 I=1,NXM1
J = NX-I
YPPA = C(J,1)*YPPB+C(J,2)
DX = X(J+1)-X(J)
C(J,3) = SIXI*(YPPB-YPPA)/DX
C(J,2) = HALF*YPPA
C(J,1) = (Y(J+1)-Y(J))/DX-(C(J,2)+C(J,3)*DX)*DX
YPPB = YPPA
25 CONTINUE
GO TO 9005
30 IER = 129
GO TO 9000
35 IER = 130
GO TO 9000
40 IER = 131
9000 CONTINUE
write(6,29888) ier
29888 format(1x,'imsl err.from ICSICU. ier=',i4)
9005 RETURN
END

subroutine ICSEVU (X,Y,NX,C,IC,U,S,M,IER)
INTEGER NX,IC,M,IER
real*8 X(NX),Y(NX),C(IC,3),U(M),S(M)
INTEGER I,JER,KER,NXM1,K
real*8 D,DD,ZERO
DATA I/1/,ZERO/0.0d0/
C FIRST EXECUTABLE STATEMENT
JER = 0
KER = 0
IF (M .LE. 0) GO TO 9005
NXM1 = NX-1
IF (I .GT. NXM1) I = 1
C EVALUATE SPLINE AT M POINTS
DO 40 K=1,M
C FIND THE PROPER INTERVAL
D = U(K)-X(I)
IF (D) 5,25,15
5 IF (I .EQ. 1) GO TO 30
I = I-1
D = U(K)-X(I)
IF (D) 5,25,20
10 I = I+1
D = DD
15 IF (I .GE. NX) GO TO 35
DD = U(K)-X(I+1)
IF (DD .GE. ZERO) GO TO 10
IF (D .EQ. ZERO) GO TO 25
C PERFORM EVALUATION
20 S(K) = ((C(I,3)*D+C(I,2))*D+C(I,1))*D+Y(I)
GO TO 40
25 S(K) = Y(I)
GO TO 40
C WARNING - U(I) .LT. X(1)
30 JER = 33
GO TO 20
C IF U(I) .GT. X(NX) - WARNING
35 IF (DD .GT. ZERO) KER = 34
D = U(K)-X(NXM1)
I = NXM1
GO TO 20
40 CONTINUE
IER = MAX0(JER,KER)
9000 CONTINUE
if(jer.gt.0) then
write(6,29666) jer
29666 format(1x,'err.mess. from ICSEVU jer=',i4)
end if
if(ker.gt.0) then
write(6,29777) ker
29777 format(1x,'err.mess. from ICSEVU ker=',i4)
end if
9005 RETURN
END

and for the function SNGPOT.f

FUNCTION SNGPOT(X)
implicit real*8 (a-h,o-z)
c
COMMON/VSNGLT/RNODE(88),VNODE(88)
COMMON/VSPLIN/BPAR(4),SPLC(87,3)
DIMENSION Y(1),VY(1)
C
Y(1)=X
CALL ICSEVU(RNODE,VNODE,88,SPLC,87,Y,VY,1,IER)
SNGPOT=VY(1)
RETURN
END

I placed block data right after the declarations, but I still I get the error;

sngdeneme.f:8.72:

COMMON/VSNGLT/RNODE(88),VNODE(88)
1
sngdeneme.f:50.72:

REAL SONUC,X
2
Error: Two main PROGRAMs at (1) and (2)

Moreover, 50th line is only an executable, so I don't understand why it stands for a new main program.
 
Last edited:
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top