For examples of user written subroutines, copy the source code: PHYSICA$DIR:PHYSICA_USER_FUNCTIONS.FOR to your own space and modify the routines to suit your own needs. You will also need to copy the DCL command procedure PHYSICA$DIR:PHYSICA_USER_FUNCTIONS.COM to your own space, modify it according to directions as explained in that file, and then execute it.
All the numeric arguments of your subroutine, except for the integer arguments IATYPE, ICODE, IUPDATE, and IER, must be REAL*8. A character argument is passed as a LOGICAL*1 array. Dimension numeric array arguments with length 1, e.g., REAL*8 X(1), Y(1), Z(1)
All the character arguments of your subroutine must be LOGICAL*1, and should be dimensioned 1, e.g., LOGICAL*1 LFILE(1). You can convert this to a character string, e.g., CHARACTER*80 CFILE, using the following method: LENF = ICODE(1,i) DO I = 1, LENF CFILE(I:I) = CHAR(LFILE(I)) END DO where LFILE is the i'th argument.
PHYSICA expects to find a user routine of the form: SUBROUTINE subname(IATYPE,ICODE,IUPDATE,IER,ARG1,ARG2,...,ARGM) INTEGER*4 IATYPE(15),ICODE(3,15),IUPDATE(15),IER If the subroutine is to loaded via the sharable image, its name must be one of SUB1, SUB2, ..., SUB8. If the subroutine is to be loaded at run- time via the LOAD command, its name is irrelevant. All of the numeric arguments, except for the integer arguments IATYPE, ICODE, IUPDATE, and IER, must be REAL*8. A character argument is passed as a LOGICAL*1 array.
Additional Information on: