[F77]Verwijzing naar functie geeft compilatiefout.

Pagina: 1
Acties:

  • rtgo
  • Registratie: September 2001
  • Laatst online: 30-05-2025

rtgo

Lemmus Lemmus

Topicstarter
Ik voor mijn stage een klein tooltje aan het schrijven en tot nu toe ging het goed. Ik ben echter vastgeraakt nu ik een nieuwe functie heb toegevoegd. Bij het compilen (met g77, default settings) krijg ik de vermelding de declaratie van of verwijzing naar de functie RELATV ongeldig is.

Het gewraakte stukje code:
code:
1
2
3
4
5
6
7
8
9
10
*Calculate realtive intensities of NOEs
400   IF (CHOOSE('Should I calculate relative intensities').NE.'Y') 
     $GO TO 500
      DO 410, J=1,NDATA
        RELTIV(J) = RELATV(ATOM1, RES1, ATOM2, RES2, INTENS, NDATA, J)
        IF (RELTIV(J).EQ. 9.999999) THEN
         ORPHAN=ORPHAN+1                                !No diagonal NOE 
        END IF
410   CONTINUE
      WRITE (*,*) ORPHAN, ' NOEs had no diagonal peak'


En hier de functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
      REAL FUNCTION RELATV(ATOM1, RES1, ATOM2, RES2, INTENS, NDATA, NOE)
      IMPLICIT NONE
      INTEGER :: NDATA, RES1(NDATA), RES2(NDATA), I, NOE
      CHARACTER*5 :: ATOM1(NDATA), ATOM2(NDATA) 
      REAL :: INTENS(NDATA), RELA=0.0

      IF (ATOM1(NOE).EQ. ATOM2(NOE)) THEN
         IF (RES1(NOE).EQ.RES2(NOE)) THEN
           RELA = 1.000000
         END IF
      ELSE
         DO 10, I=1,NDATA
         IF ((ATOM1(I).EQ.ATOM1(NOE)).AND.(RES1(I).EQ.RES1(NOE)) .AND.
     $   (ATOM2(I).EQ.ATOM1(NOE)).AND.(RES2(I).EQ.RES1(NOE))) THEN
           RELA = INTENS(NOE)/INTENS(I)
           RETURN                                    !Escape from loop
         ELSE 
           RELA = 9.999999                       !All else failed value
         END IF
10       CONTINUE
      END IF
      RELATV=RELA
      END


Overigens is CHOOSE in het eerste stukje code een andere functie die wel werkt. Wie ziet wat ik hier fout doe?

Life of a Lemmus Total Hardware 1999


  • rtgo
  • Registratie: September 2001
  • Laatst online: 30-05-2025

rtgo

Lemmus Lemmus

Topicstarter
Probleem al gevonden:
Als je IMPLICIT NONE gebruikt moet je functies als variabelen declareren |:( Hier dus: REAL :: RELATV=0

De functie RELATV kan trouwens veel korter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      REAL FUNCTION RELATV(ATOM1, RES1, ATOM2, RES2, INTENS, NDATA, NOE)
      IMPLICIT NONE
      INTEGER :: NDATA, RES1(NDATA), RES2(NDATA), I, NOE
      CHARACTER*5 :: ATOM1(NDATA), ATOM2(NDATA)
      REAL :: INTENS(NDATA), RELA

      DO 10, I=1,NDATA
      IF ((ATOM1(I).EQ.ATOM1(NOE)).AND.(RES1(I).EQ.RES1(NOE)) .AND.
     $(ATOM2(I).EQ.ATOM1(I)).AND.(RES2(I).EQ.RES1(I))) THEN
           RELA = INTENS(NOE)/INTENS(I)
           GO TO 20                           !Value found, jump to end
      ELSE
           RELA = 9.999999                       !All else failed value
      END IF
10    CONTINUE 
20    RELATV=RELA
      END

[ Voor 5% gewijzigd door rtgo op 11-01-2005 22:43 ]

Life of a Lemmus Total Hardware 1999