Czy Fortran 90 może być używany z Aspen Plus, czy tylko Fortran 77?

1

Próbuję napisać model użytkownika w Fortran, który można podłączyć do symulatora procesu Aspen Plus. Czy Fortran 90 może być użyty, czy Aspen działa tylko ze starszym Fortranem 77? Sprawdziłem dokumentację Aspen Plus, ale nie mogę znaleźć informacji o tym, z którymi wersjami Fortran jest kompatybilny.

Zach
źródło

Odpowiedzi:

0

Nie jestem w 100% na tym, ale nie sądzę, żeby sam AspenPlus się tym przejmował. Dzieje się tak, ponieważ AspenPlus wywołuje kompilator Fortran, aby skompilować i połączyć kod, a następnie zużywa kod jako .dll (Biblioteka linków dynamicznych). Szczegóły dotyczące twojego Fortrana i kompilacji kompilatora wydają się być poza zakresem AspenPlus.

Tak więc AspenPlus jest prawdopodobnie szczęśliwy, dopóki kompilator może skompilować kod do biblioteki, która łączy się poprawnie.

Wydaje się, że zaakceptowana wersja Fortrana będzie funkcją twojego kompilatora. Tak długo, jak twój kompilator zamienia Fortran w .dll z konwencją połączeń, której oczekuje AspenPlus, prawdopodobnie wystarczy.

Nat
źródło
Myślę, że masz rację, że Aspen nie obchodzi tak długo, jak długo twój kompilator tworzy bibliotekę Fortran DLL, jednak natrafiłem na problemy podczas miksowania wolnego i stałego formatowania (zobacz moją aktualizację pytania). Czy jest jakiś sposób na obejście tego problemu, czy utknęliśmy przy stałym formatowaniu?
Zach
0

Nat miał rację, że Aspen nie obchodzi tak długo, jak twój kompilator może produkować DLL z kodu Fortrana 90 (co większość robi). Jednak odkryłem, że pliki Aspena, które muszą być zawarte w większości modeli użytkowników, są zapisywane w stałym formacie (styl formatowania używany z Fortranem 77). Więc kiedy używasz kodu Fortran 90 w wolnym formacie, otrzymujesz mnóstwo błędów kompilatora z powodu kombinacji formatowania stałego i wolnego. Tam jest rozwiązanie Jednak: umieszczaj dyrektywy wokół linii włączających, które przełączają się na stały format tylko dla dołączonych plików.

Oto przykład z centrum wsparcia Aspen. Jest to model użytkownika, który ma obliczyć lepkość związku.

SUBROUTINE MUL2U (T, P, Z, N, IDX, &
      IRW, IIW, KCALC, KOP, NDS, &
      KDIAG, QMX, DQMX, KER)
      IMPLICIT REAL*8 (A-H,O-Z)

#include "dms_plex.cmn" 
#include "ppexec_user.cmn" 
      integer b(1) 
      equivalence (b(1), ib(1)) 
      integer dms_ifcmnc
      integer limuusr
      limuusr=dms_ifcmnc('MUUSR') 

!     The following input language is required to define A and B
!     (just define them for the 1st component in the list)

!     PROPERTIES RKS-MU SOLU-WATER=2 
!       PROPERTIES RK-SOAVE 

!     PROP-REPLACE RKS-MU RK-SOAVE 
!       PROP MULMX MULMXUSR 

!     USER-PROPS MUUSR 1 1 2 
!
!     PROP-DATA MUUSR-1
!       PROP-LIST MUUSR 
!       PVAL WATER -5 20 

!     To check that parameters are correctly transferred, set global diagnostics:

!     HISTORY PROP-LEVEL=5
      AA = B(limuusr + 1)
      BB = B(limuusr + 2)
      if (KDIAG .GE. 5) then
        WRITE (USER_NHSTRY, *)'A = ', AA, ' B = ', BB
      endif
      qmx = exp(AA + BB / T)
      dqmx = - BB * qmx / (T * T)

      RETURN
      END subroutine mul2u

Przykład został pierwotnie napisany dla Fortran 77 (więc używał stałego formatowania) i dokonałem kilku zmian niezbędnych do skompilowania go za pomocą darmowego formatowania. Jednak podczas kompilacji otrzymujesz ciąg błędów, które pochodzą z plików Aspen zawartych w podprogramie (więc dms_plex.cmn i ppexec_user.cmn). Oto przykład jednego z błędów:

c:\Program Files (x86)\AspenTech\AprSystem V8.8\Engine\commons/ppexec_user.cmn(7): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: %FILL <IDENTIFIER>
      INTEGER USER_IUMISS,   USER_NGBAL,    USER_IPASS,
-------------------------------------------------------^

Ponownie wydaje się, że kompilator podaje błąd, ponieważ pliki Aspen są zapisywane w stałym formacie i kompilujemy w wolnym formacie. Aby obejść ten tryb, dyrektywy, które przełączają się na stały format iz powrotem.

!DEC $ NOFREEFORM
#include "dms_plex.cmn"
#include "ppexec_user.cmn"
! DEC $  DOWOLNA FORMA 

Kiedy używam tych dyrektyw wokół instrukcji include, kompilator działa bez błędów i mogę użyć modelu użytkownika Fortran 90 w Aspen.

Zach
źródło