Don't use fname to define functions
[maxima.git] / src / numerical / slatec / slatec.system
blobc05449fb113e4e62627ec9af05611fffe2284525
1 ;;; -*- Mode: lisp -*-
3 ;;; This defsystem is used to convert the Fortran code to lisp.
4 ;;;
5 ;;; You need a copy of f2cl (see clocc.sourceforge.net) for this to
6 ;;; work, of course.  Once you have that, you can convert the Fortran
7 ;;; code to Lisp.
8 ;;;
9 ;;; If you add or modify any Fortran file, it is probably best to use
10 ;;; (mk:oos "slatec" :compile :force t) to convert the code.  This is
11 ;;; because f2cl uses knowledge of calling conventions of a known
12 ;;; function to generate the call to that function.  If the function
13 ;;; is not known, then the call could inefficient at best or erroneous
14 ;;; at worst.
15 ;;;
16 ;;; This also means that you should get the file dependencies right so
17 ;;; that mk:defsys will compile the files in the right order.
19 ;;; Define a new language for defsys to use.
20 (mk:define-language :f2cl
21     :compiler #'f2cl:f2cl
22     :loader #'identity
23     :source-extension "f"
24     :binary-extension "lisp")
26 (mk:defsystem "slatec"
27   :source-extension "f"
28   :binary-extension "lisp"
29   :components
30   ((:module xermsg
31             :source-pathname "fortran"
32             :binary-pathname "."
33             :language :f2cl
34             :compiler-options (:array-slicing nil
35                                :array-type :simple-array
36                                :float-format double-float
37                                :package :slatec)
38             :compile-only t
39             :components
40             (
41              (:file "fdump")
42              (:file "j4save")
43              (:file "xgetua")
44              (:file "xermsg"
45                     :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
46              (:file "xercnt")
47              (:file "xerhlt")
48              (:file "xerprn"
49                     :depends-on ("xgetua"))
50              (:file "xersve"
51                     :depends-on ("j4save"))))
52    (:module fortran
53             :source-pathname "fortran"
54             :binary-pathname "."
55             :language :f2cl
56             :compiler-options (:array-slicing nil
57                                :array-type :simple-array
58                                :float-format double-float
59                                :package :slatec)
60             :depends-on ("xermsg")
61             :compile-only t
62             :components
63             (
64              (:file "initds")
65              (:file "dcsevl")
66              
67              ;; Gamma function
68              (:file "d9lgmc"
69                     :depends-on ("dcsevl" "initds"))
70              (:file "dgamlm")
71              (:file "dgamma"
72                     :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds"))
73              (:file "dgamln")
74              (:file "dlngam"
75                     :depends-on ("d9lgmc" "dgamma"))
76              
77              ;; Bessel J functions for real arg and order
78              (:file "d9b0mp"
79                     :depends-on ("dcsevl" "initds"))
80              (:file "d9b1mp"
81                     :depends-on ("dcsevl" "initds"))
82              (:file "dbesj0"
83                     :depends-on ("d9b0mp" "dcsevl" "initds"))
84              (:file "dbesj1"
85                     :depends-on ("d9b1mp" "dcsevl" "initds"))
86              (:file "djairy")
87              (:file "dasyjy"
88                     :compiler-options (:array-slicing nil
89                                        :array-type :array
90                                        :float-format double-float
91                                        :package :slatec))
92              (:file "dbesj"
93                     :depends-on ("dasyjy" "djairy" "dlngam")
94                     :compiler-options (:array-slicing t
95                                        :array-type :simple-array
96                                        :float-format double-float
97                                        :package :slatec))
98              (:file "dbsynu"
99                     :depends-on ("dgamma"))
101              (:file "dyairy")
103              
104              ;; Bessel J function for complex arg and real order.
105              (:file "zabs")
106              (:file "zacai"
107                     :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
108              (:file "zairy"
109                     :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
110              (:file "zasyi"
111                     :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
112              (:file "zbesj"
113                     :depends-on ("zabs" "zbinu"))
114              (:file "zbinu"
115                     :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
116              (:file "zbknu"
117                     :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
118                                           "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
119              (:file "zbuni"
120                     :depends-on ("zabs" "zuni1" "zuni2"))
121              (:file "zdiv")
122              (:file "zexp")
123              (:file "zkscl"
124                     :depends-on ("zabs" "zlog" "zuchk"))
125              (:file "zlog"
126                     :depends-on ("zabs"))
127              (:file "zmlri"
128                     :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
129              (:file "zmlt")
130              (:file "zrati"
131                     :depends-on ("zabs" "zdiv"))
132              (:file "zs1s2"
133                     :depends-on ("zabs" "zexp" "zlog"))
134              (:file "zseri"
135                     :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
136              (:file "zshch")
137              (:file "zsqrt" :depends-on ("zabs"))
138              (:file "zuchk")
139              (:file "zunhj"
140                     :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
141              (:file "zuni1"
142                     :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
143              (:file "zuni2"
144                     :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
145              (:file "zunik"
146                     :depends-on ("zdiv" "zlog" "zsqrt"))
147              (:file "zuoik"
148                     :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
149              (:file "zwrsk"
150                     :depends-on ("zabs" "zbknu" "zrati"))
152              ;; Bessel Y functions for real or complex arg and real order
153              (:file "dbesy0"
154                     :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds"))
155              (:file "dbesy1"
156                     :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds"))
157              (:file "dbesy"
158                     :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy"))
159              (:file "dbsynu"
160                     :depends-on ("dgamma"))
161              (:file "dyairy")
162              
163              (:file "zbesy"
164                     :depends-on ("zbesh"))
165              (:file "zbesh"
166                     :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
167              (:file "zacon"
168                     :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
169              (:file "zbunk"
170                     :depends-on ("zunk1" "zunk2"))
171              (:file "zunk1"
172                     :compiler-options (:array-slicing t
173                                        :float-format double-float
174                                        :package :slatec)
175                     :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
176              (:file "zunk2"
177                     :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
179              ;; Bessel I functions for real or complex arg and real order
180              (:file "dbsi0e"
181                     :depends-on ("dcsevl" "initds"))
182              (:file "dbsi1e"
183                     :depends-on ("dcsevl" "initds"))
184              (:file "dbesi0"
185                     :depends-on ("dbsi0e" "dcsevl" "initds"))
186              (:file "dbesi1"
187                     :depends-on ("dbsi1e" "dcsevl" "initds"))
188              (:file "dasyik"
189                     :compiler-options (:array-slicing nil
190                                        :array-type :array
191                                        :float-format double-float
192                                        :package :slatec))
193              (:file "dbesi"
194                     :depends-on ("dasyik" "dlngam")
195                     :compiler-options (:array-slicing t
196                                        :array-type :array
197                                        :float-format double-float
198                                        :package :slatec))
199              (:file "zbesi"
200                     :depends-on ("zabs" "zbinu"))
202              ;; Bessel K functions
203              (:file "dbesk0"
204                     :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds"))
205              (:file "dbsk0e"
206                     :depends-on ("dbesi0" "dcsevl" "initds"))
207              (:file "dbesk1"
208                     :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds"))
209              (:file "dbsk1e"
210                     :depends-on ("dbesi1" "dcsevl" "initds"))
211              (:file "dbesk"
212                     :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu"))
213              (:file "dbsknu"
214                     :depends-on ("dgamma"))
215              (:file "zbesk"
216                     :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
217              
218              ;; Airy functions
219              (:file "d9aimp"
220                     :depends-on ("dcsevl" "initds"))
221              (:file "daie"
222                     :depends-on ("d9aimp" "dcsevl" "initds"))
223              (:file "dai"
224                     :depends-on ("d9aimp" "daie" "dcsevl" "initds"))
225              (:file "dbie"
226                     :depends-on ("d9aimp" "dcsevl" "initds"))
227              (:file "dbi"
228                     :depends-on ("d9aimp" "dbie" "dcsevl" "initds"))
229              (:file "zbiry"
230                     :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
232              ;; Error functions
233              (:file "derf"
234                     :depends-on ("dcsevl" "derfc" "initds"))
235              (:file "derfc"
236                     :depends-on ("dcsevl" "initds"))
237              
238              ;; Exponential integrals
239              (:file "de1"
240                     :depends-on ("dcsevl" "initds"))
241              (:file "dei"
242                     :depends-on ("de1"))
243              ;; Spence's function, related to dilogarithm
244              (:file "dspenc"
245                     :depends-on ("d9upak"))
246              (:file "d9upak")
247              ))
248    (:module quadpack
249             :source-pathname "fortran"
250             :binary-pathname "."
251             :language :f2cl
252             ;; These are appropriate defaults for quadpack because
253             ;; some of the routines slice an array and pass it as an
254             ;; argument to other routines.
255             ;;
256             ;; If we want to make the routines faster, array-slicing
257             ;; and array-type should be overridden in the individual
258             ;; files.
259             :compiler-options (:array-slicing t
260                                :array-type :array
261                                :float-format double-float
262                                :package :slatec)
263             :compile-only t
264             :depends-on ("xermsg")
265             :components
266               (
267                ;; Support
268                (:file "dqwgtf")
269                (:file "dqcheb")
270                (:file "dqk15w")
271                (:file "dqwgts")
272                (:file "dqwgtc")
273                (:file "dgtsl")
274                ;;(:file "xermsg")
275                
276                ;; Core integration routines
277                (:file "dqk15")
278                (:file "dqk31")
279                (:file "dqk41")
280                (:file "dqk51")
281                (:file "dqk61")
282                (:file "dqk21")
283                (:file "dqk15i")
284                (:file "dqelg")
285                (:file "dqpsrt")
286                (:file "dqc25s"
287                       :depends-on ("dqcheb" "dqk15w"))
288                (:file "dqmomo")
289                (:file "dqc25c"
290                       :depends-on ("dqcheb"
291                                    "dqk15w"))
292                (:file "dqc25f"
293                       :depends-on ("dgtsl"
294                                    "dqcheb"
295                                    "dqk15w"
296                                    "dqwgtf"))
297                ;; Basic integrators
298                (:file "dqage"
299                       :depends-on ("dqk15"
300                                    "dqk31"
301                                    "dqk41"
302                                    "dqk51"
303                                    "dqk61"
304                                    "dqk21"
305                                    "dqpsrt"))
306                (:file "dqagie"
307                       :depends-on ("dqelg"
308                                    "dqk15i"
309                                    "dqpsrt"))
310                (:file "dqagpe"
311                       :depends-on ("dqelg"
312                                    "dqpsrt"
313                                    "dqk21"
314                                    ))
315                (:file "dqagse"
316                       :depends-on ("dqk21"
317                                    "dqelg"
318                                    "dqpsrt"))
319                (:file "dqawfe"
320                       :depends-on ("dqagie"
321                                    "dqawoe"
322                                    "dqelg")
323                       ;; If your defsystem doesn't support :compiler-options, use this:
324                       ;; :language :f2cl-no-slice
325                       ;; If your defsystem does support :compiler-options, use this:
326                       :compiler-options (:array-slicing nil
327                                          :array-type :array
328                                          :float-format double-float
329                                          :package :slatec)
330                       )
331                (:file "dqawoe"
332                       :depends-on ("dqc25f"
333                                    "dqpsrt"
334                                    "dqelg"))
335                (:file "dqawse"
336                       :depends-on ("dqc25s"
337                                    "dqmomo"
338                                    "dqpsrt"))
339                (:file "dqawce"
340                       :depends-on ("dqc25c"
341                                    "dqpsrt"))
342                ;; Simplified interface routines
343                (:file "dqng")
344                (:file "dqag"
345                       :depends-on ("dqage"))
346                (:file "dqags"
347                       :depends-on ("dqagse"))
348                (:file "dqagi"
349                       :depends-on ("dqagie"))
350                (:file "dqawf"
351                       :depends-on ("dqawfe"))
352                (:file "dqawo"
353                       :depends-on ("dqawoe"))
354                (:file "dqaws"
355                       :depends-on ("dqawse"))
356                (:file "dqawc"
357                       :depends-on ("dqawce")))
358             )))