È possibile utilizzare Fortran 90 con Aspen Plus o solo con Fortran 77?


1

Sto tentando di scrivere un modello utente in Fortran che può essere collegato al simulatore di processo Aspen Plus. È possibile utilizzare Fortran 90 o Aspen funziona solo con Fortran 77 precedente? Ho controllato la documentazione di Aspen Plus, ma non trovo nulla su quali versioni di Fortran è compatibile con.

Risposte:


0

Non sono al 100% su questo, ma non penso che AspenPlus stesso si interessi. Questo perché AspenPlus chiama un compilatore Fortran per compilare e collegare il codice, quindi consuma il codice come .dll (libreria di collegamento dinamico). I dettagli dietro il tuo Fortran e il modo in cui il compilatore viene compilato sembrano oltre la portata della preoccupazione di AspenPlus.

Quindi, AspenPlus è probabilmente felice finché il compilatore può compilare il tuo codice in una libreria che si collega correttamente.

Quindi, sembrerebbe che la versione di Fortran accettata sia una funzione del tuo compilatore. Finché il compilatore trasforma Fortran in a .dll con la convenzione di chiamata che AspenPlus si aspetta, è probabilmente sufficiente.


Penso che tu abbia ragione sul fatto che Aspen non si preoccupi del fatto che il tuo compilatore crea una DLL Fortran, tuttavia, ho incontrato dei problemi durante il mix di formattazione libera e fissa (vedi il mio aggiornamento alla domanda). C'è un modo per aggirare questo, o siamo bloccati con la formattazione fissa?
Zach

0

Nat aveva ragione che ad Aspen non importa quanto il compilatore può produrre una DLL dal codice Fortran 90 (che la maggior parte fa). Tuttavia, ho trovato che i file Aspen che devono essere inclusi nella maggior parte dei modelli utente sono scritti in formato fisso (lo stile di formattazione usato con Fortran 77). Quindi, quando si utilizza il codice di Fortran 90 in formato gratuito si ottiene un sacco di errori del compilatore a causa del mix di formattazione fissa e gratuita. C'è un soluzione comunque: metti le direttive intorno alle righe include che passano al formato fisso solo per i file inclusi.

Ecco un esempio che ho ricevuto dal centro di supporto Aspen. È un modello utente che dovrebbe calcolare la viscosità di un composto.

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

L'esempio è stato originariamente scritto per Fortran 77 (quindi ha utilizzato la formattazione fissa) e ho apportato le poche modifiche necessarie per la sua compilazione utilizzando la formattazione libera. Tuttavia, durante la compilazione ottieni una stringa di errori che provengono dai file Aspen inclusi nella subroutine (quindi dms_plex.cmn e ppexec_user.cmn). Ecco un esempio di uno degli errori:

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,
-------------------------------------------------------^

Di nuovo, sembra che il compilatore dia l'errore perché i file Aspen sono scritti in formato fisso e stiamo compilando con il formato libero. Per aggirare questo uso, le direttive passano al formato fisso e viceversa.

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

Quando uso queste direttive attorno all'istruzione include, il compilatore funziona senza errori e posso usare un modello utente Fortran 90 in Aspen.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.