/usr/share/axiom-20170501/src/algebra/ASP4.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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | )abbrev domain ASP4 Asp4
++ Author: Mike Dewar, Grant Keady and Godfrey Nolan
++ Date Created: Mar 1993
++ Date Last Updated: 6 October 1994
++ References:
++ Hawk95 Two more links to NAG numerics involving CA systems
++ Kead93 Production of Argument SubPrograms in the AXIOM -- NAG link
++ Description:
++\spadtype{Asp4} produces Fortran for Type 4 ASPs, which take an expression
++in X(1) .. X(NDIM) and produce a real function of the form:
++
++\tab{5}DOUBLE PRECISION FUNCTION FUNCTN(NDIM,X)\br
++\tab{5}DOUBLE PRECISION X(NDIM)\br
++\tab{5}INTEGER NDIM\br
++\tab{5}FUNCTN=(4.0D0*X(1)*X(3)**2*DEXP(2.0D0*X(1)*X(3)))/(X(4)**2+(2.0D0*\br
++\tab{4}&X(2)+2.0D0)*X(4)+X(2)**2+2.0D0*X(2)+1.0D0)\br
++\tab{5}RETURN\br
++\tab{5}END
Asp4(name) : SIG == CODE where
name : Symbol
FEXPR ==> FortranExpression([],['X],MachineFloat)
FST ==> FortranScalarType
FT ==> FortranType
SYMTAB ==> SymbolTable
RSFC ==> Record(localSymbols:SymbolTable,code:List(FortranCode))
FSTU ==> Union(fst:FST,void:"void")
FRAC ==> Fraction
POLY ==> Polynomial
EXPR ==> Expression
INT ==> Integer
FLOAT ==> Float
SIG ==> FortranFunctionCategory with
coerce : FEXPR -> $
++coerce(f) takes an object from the appropriate instantiation of
++\spadtype{FortranExpression} and turns it into an ASP.
CODE ==> add
real : FSTU := ["real"::FST]$FSTU
syms : SYMTAB := empty()$SYMTAB
declare!(NDIM,fortranInteger(),syms)$SYMTAB
xType : FT := construct(real,[NDIM],false)$FT
declare!(X,xType,syms)$SYMTAB
Rep := FortranProgram(name,real,[NDIM,X],syms)
retract(u:FRAC POLY INT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:FRAC POLY INT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
retract(u:FRAC POLY FLOAT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:FRAC POLY FLOAT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
retract(u:EXPR FLOAT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:EXPR FLOAT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
retract(u:EXPR INT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:EXPR INT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
retract(u:POLY FLOAT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:POLY FLOAT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
retract(u:POLY INT):$ == (retract(u)@FEXPR)::$
retractIfCan(u:POLY INT):Union($,"failed") ==
foo : Union(FEXPR,"failed")
foo := retractIfCan(u)$FEXPR
foo case "failed" => "failed"
foo::FEXPR::$
coerce(u:FEXPR):$ ==
coerce((u::Expression(MachineFloat))$FEXPR)$Rep
coerce(c:List FortranCode):$ == coerce(c)$Rep
coerce(r:RSFC):$ == coerce(r)$Rep
coerce(c:FortranCode):$ == coerce(c)$Rep
coerce(u:$):OutputForm == coerce(u)$Rep
outputAsFortran(u):Void ==
p := checkPrecision()$NAGLinkSupportPackage
outputAsFortran(u)$Rep
p => restorePrecision()$NAGLinkSupportPackage
|