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.