Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hey, ich hab eine Frage zu einem Fortran Code.

Ich programmiere gerade eine Subroutine als Teil eines Umfangreichen Programms. Jetzt habe ich folgende Anordnung welche mir Probleme bereitet:

Hauptgrogramm(geht mich nix an)

-----------

subroutine MeineSub(..)

!hier wird eine Variable x festgelegt welche in einer so zu

!sagen sub-sub die grösse einer Matrix festlegt.

implicit none

integer x

parameter (x=5)

...

call subroutine Subsub(x)

...

end

------------

subroutine Subsub(x)

implicit none

integer x

real*8 aa(x,x)

...

end

---------------------

Jetzt habe ich das problem, dass in der subsub zwar die grösse der matrix richtig dimensioniert wird, aber ich mit ihr nichts berechnen kann, nicht mal null setzten ist möglich. im debugger erhalte ich nur "floating point" einträge.

Ist diese anordnung überhaupt möglich, also eine deklaration ein einer untersub ohne dass die matrix in der übergeordneten subrotine deklariert wird?? Wäre blöd weil ich sie nur in der SubSub brauche und nicht reinübergeben wollte.

wenn ich ganz normal durch eine zahl dimensioniere funktioniert alles. und der debugger sagt mir auch dass x in der subsub die richtige zahl enthällt.

Aber ich muss das programm leider variablen-abhängig halten.

Ich hoffe jemand kann mir hefen!

ogx

Geschrieben (bearbeitet)

Dynamische Arrays zu generieren, die nicht übergeben werden, dass ist nicht möglich, da eine Konstante in diesem Fall erwartet wird!

Ich hätte folgendes anzubieten, vielleicht hilft es dir weiter:

Ich würde die Passage mit (integer x, parameter (x=5)) in ein Include file auslagern, dann könntest du in abhängigkeit von x folgendermaßen arbeiten:


Include file inc.for

C

      INTEGER*4

     * X

C

      PARAMETER(X=5)


Dein Programm:

      program test

C

      IMPLICIT NONE

C

      INCLUDE 'INC.FOR'      

C      

      CALL SUB1()

C      

      end



      subroutine sub1()

C

      IMPLICIT NONE 

C

      INCLUDE 'INC.FOR' 

C

      INTEGER*4

     * I, J

C

      REAL*8

     * AA(X,X)

C

      DO I=1, X 

       DO J=1, X

        AA(I,J)=0.0d0

       ENDDO

      ENDDO

C     

      end

Bearbeitet von casio

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...