/usr/share/axiom-20170501/src/algebra/ASP29.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | )abbrev domain ASP29 Asp29
++ Author: Mike Dewar and Godfrey Nolan
++ Date Created: Nov 1993
++ Date Last Updated: 18 March 1994
++ References:
++ Hawk95 Two more links to NAG numerics involving CA systems
++ Kead93 Production of Argument SubPrograms in the AXIOM -- NAG link
++ Description:
++\spadtype{Asp29} produces Fortran for Type 29 ASPs, needed for NAG routine
++f02fjf, for example:
++
++\tab{5}SUBROUTINE MONIT(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D)\br
++\tab{5}DOUBLE PRECISION D(K),F(K)\br
++\tab{5}INTEGER K,NEXTIT,NEVALS,NVECS,ISTATE\br
++\tab{5}CALL F02FJZ(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D)\br
++\tab{5}RETURN\br
++\tab{5}END\br
Asp29(name) : SIG == CODE where
name : Symbol
FST ==> FortranScalarType
FT ==> FortranType
FSTU ==> Union(fst:FST,void:"void")
SYMTAB ==> SymbolTable
FC ==> FortranCode
PI ==> PositiveInteger
EXF ==> Expression Float
EXI ==> Expression Integer
VEF ==> Vector Expression Float
VEI ==> Vector Expression Integer
MEI ==> Matrix Expression Integer
MEF ==> Matrix Expression Float
UEXPR ==> Union(I: Expression Integer,F: Expression Float,_
CF: Expression Complex Float)
RSFC ==> Record(localSymbols:SymbolTable,code:List(FortranCode))
SIG ==> FortranProgramCategory with
outputAsFortran : () -> Void
++outputAsFortran() generates the default code for \spadtype{ASP29}.
CODE ==> add
import FST
import FT
import FC
import SYMTAB
real : FSTU := ["real"::FST]$FSTU
integer : FSTU := ["integer"::FST]$FSTU
syms : SYMTAB := empty()
declare!(ISTATE,fortranInteger(),syms)
declare!(NEXTIT,fortranInteger(),syms)
declare!(NEVALS,fortranInteger(),syms)
declare!(NVECS,fortranInteger(),syms)
declare!(K,fortranInteger(),syms)
kType : FT := construct(real,[K],false)$FT
declare!(F,kType,syms)
declare!(D,kType,syms)
Rep := FortranProgram(name,["void"]$FSTU,
[ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D],syms)
outputAsFortran():Void ==
callOne := call("F02FJZ(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D)")
code : List FC := [callOne,returns()]$List(FC)
outputAsFortran(coerce(code)@Rep)$Rep
|