Switch to unified view

a/LibDBlasF77.def.m2pp b/LibDBlasF77.def.m2pp
...
...
35
  (* * ddot      : dot product of two vectors                               *)
35
  (* * ddot      : dot product of two vectors                               *)
36
  (* * idamax    : index of vector element with largest absolute value      *)
36
  (* * idamax    : index of vector element with largest absolute value      *)
37
  (* * idamin    : index of vector element with smalles absolute value      *)
37
  (* * idamin    : index of vector element with smalles absolute value      *)
38
  (* * dasum     : sum of absolut values of real vector elements            *)
38
  (* * dasum     : sum of absolut values of real vector elements            *)
39
  (*                                                                        *)
39
  (*                                                                        *)
40
  (*   zswap     : swap two vectors                                         *)
41
  (*   zcopy     : copy a vector to a vector                                *)
42
  (*   zdotc     : dot product of two vectors                               *)
43
  (*   dznrm2    : euklidian norm of a vector                               *)
44
  (*   zscal     : scale vector by a constant                               *)
45
  (* * zaxpy     : constant times a vector plus a vector                    *)
46
  (*   zdrot     : plane rotation                                           *)
47
  (*                                                                        *)
48
  (* Level 2                                                                *)
49
  (*                                                                        *)
50
  (*   dgemv     : double precision matrix vector multiplication            *)
51
  (*   zgemv     : double complex   matrix vector multiplication            *)
52
  (*                                                                        *)
40
  (* Level 3                                                                *)
53
  (* Level 3                                                                *)
41
  (*                                                                        *)
54
  (*                                                                        *)
42
  (*   sgemm     : single precision matrix matrix multiplication            *)
55
  (*   sgemm     : single precision matrix matrix multiplication            *)
43
  (*   dgemm     : double precision matrix matrix multiplication            *)
56
  (*   dgemm     : double precision matrix matrix multiplication            *)
44
  (*   zgemm     : double complex matrix matrix multiplication              *)
57
  (*   zgemm     : double complex matrix matrix multiplication              *)
...
...
54
  (*                  Changed ARRAY OF DOUBLEPRECISION to                   *)
67
  (*                  Changed ARRAY OF DOUBLEPRECISION to                   *)
55
  (*                  (* ARRAY OF *) DOUBLEPRECISION                        *)
68
  (*                  (* ARRAY OF *) DOUBLEPRECISION                        *)
56
  (* 29.10.17, MRi: Added dgemm                                             *)
69
  (* 29.10.17, MRi: Added dgemm                                             *)
57
  (* 01.11.17, MRi: Added idamin                                            *)
70
  (* 01.11.17, MRi: Added idamin                                            *)
58
  (* 23.06.18, MRi: Added zgemm                                             *)
71
  (* 23.06.18, MRi: Added zgemm                                             *)
72
  (* 11.09.18, MRi: Added zswap,zcopy,zdotc,dznrm2,zscal,zaxpy,zdrot        *)
73
  (*                and dgemv, zgemv                                        *)
59
  (*------------------------------------------------------------------------*)
74
  (*------------------------------------------------------------------------*)
60
  (* Implementation : Michael Riedl                                         *)
75
  (* Implementation : Michael Riedl                                         *)
61
  (* Licence        : GNU Lesser General Public License (LGPL)              *)
76
  (* Licence        : GNU Lesser General Public License (LGPL)              *)
62
  (*------------------------------------------------------------------------*)
77
  (*------------------------------------------------------------------------*)
63
78
64
  (* $Id: LibDBlasF77.def.m2pp,v 1.1 2018/06/15 08:59:31 mriedl Exp mriedl $ *)
79
  (* $Id: LibDBlasF77.def.m2pp,v 1.3 2018/09/12 13:20:49 mriedl Exp mriedl $ *)
65
80
66
IMPORT LibDBlasL1F77;
81
IMPORT LibDBlasL1F77;
82
IMPORT LibDBlasL2F77;
67
IMPORT LibDBlasL3F77;
83
IMPORT LibDBlasL3F77;
68
84
69
TYPE DOUBLEPRECISION = LibDBlasL1F77.DOUBLEPRECISION;
85
TYPE DOUBLEPRECISION = LibDBlasL1F77.DOUBLEPRECISION;
70
     INTEGER4        = LibDBlasL1F77.INTEGER4;
86
     INTEGER4        = LibDBlasL1F77.INTEGER4;
71
     CHAR1           = LibDBlasL1F77.CHAR1;
87
     CHAR1           = LibDBlasL1F77.CHAR1;
72
88
73
CONST dnrm2 = LibDBlasL1F77.dnrm2_;
74
75
(*
89
(*
76
 * PROCEDURE dnrm2(VAR n    : INTEGER4;
90
 * PROCEDURE dnrm2(VAR n    : INTEGER4;
77
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;
91
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;
78
 *                 VAR IncX : INTEGER4): DOUBLEPRECISION;
92
 *                 VAR IncX : INTEGER4): DOUBLEPRECISION;
79
 *)
93
 *)
94
95
CONST dnrm2 = LibDBlasL1F77.dnrm2_;
96
80
          (*----------------------------------------------------------------*)
97
          (*----------------------------------------------------------------*)
81
          (* dnrm2 returns the euclidean norm of a vector via the function  *)
98
          (* dnrm2 returns the euclidean norm of a vector via the function  *)
82
          (* name, so that dnrm2 := sqrt( x^{tr}*x )                        *)
99
          (* name, so that dnrm2 := sqrt( x^{tr}*x )                        *)
83
          (*----------------------------------------------------------------*)
100
          (*----------------------------------------------------------------*)
84
85
CONST dswap = LibDBlasL1F77.dswap_;
86
101
87
(*
102
(*
88
 * PROCEDURE dswap(VAR N    : INTEGER4;
103
 * PROCEDURE dswap(VAR N    : INTEGER4;
89
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;  
104
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;  
90
 *                 VAR incx : INTEGER4;  
105
 *                 VAR incx : INTEGER4;  
91
 *                 VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
106
 *                 VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
92
 *                 VAR incy : INTEGER4);
107
 *                 VAR incy : INTEGER4);
93
 *)
108
 *)
109
110
CONST dswap = LibDBlasL1F77.dswap_;
111
94
          (*----------------------------------------------------------------*)
112
          (*----------------------------------------------------------------*)
95
          (* Interchanges two vectors using unrolled loops for increments   *)
113
          (* Interchanges two vectors using unrolled loops for increments   *)
96
          (* equal to 1.                                                    *)
114
          (* equal to 1.                                                    *)
97
          (*----------------------------------------------------------------*)
115
          (*----------------------------------------------------------------*)
98
99
CONST dcopy = LibDBlasL1F77.dcopy_;
100
116
101
(*
117
(*
102
 * PROCEDURE dcopy(VAR N    : INTEGER4;
118
 * PROCEDURE dcopy(VAR N    : INTEGER4;
103
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;
119
 *                 VAR X    : (* ARRAY OF *) DOUBLEPRECISION;
104
 *                 VAR IncX : INTEGER4;
120
 *                 VAR IncX : INTEGER4;
105
 *                 VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
121
 *                 VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
106
 *                 VAR IncY : INTEGER);
122
 *                 VAR IncY : INTEGER);
107
 *)
123
 *)
124
125
CONST dcopy = LibDBlasL1F77.dcopy_;
126
108
          (*----------------------------------------------------------------*)
127
          (*----------------------------------------------------------------*)
109
          (* copies a vector, x, to a vector, y.                            *)
128
          (* copies a vector, x, to a vector, y.                            *)
110
          (* uses unrolled loops for increments equal to one.               *)
129
          (* uses unrolled loops for increments equal to one.               *)
111
          (* jack dongarra, linpack, 3/11/78.                               *)
130
          (* jack dongarra, linpack, 3/11/78.                               *)
112
          (*----------------------------------------------------------------*)
131
          (*----------------------------------------------------------------*)
113
114
CONST drot = LibDBlasL1F77.drot_;
115
132
116
(*
133
(*
117
 * PROCEDURE drot(VAR N    : INTEGER4;  
134
 * PROCEDURE drot(VAR N    : INTEGER4;  
118
 *                VAR X    : (* ARRAY OF *) DOUBLEPRECISION;  
135
 *                VAR X    : (* ARRAY OF *) DOUBLEPRECISION;  
119
 *                VAR incX : INTEGER4;
136
 *                VAR incX : INTEGER4;
120
 *                VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
137
 *                VAR Y    : (* ARRAY OF *) DOUBLEPRECISION;
121
 *                VAR incY : INTEGER4; 
138
 *                VAR incY : INTEGER4; 
122
 *                VAR c,s  : DOUBLEPRECISION);
139
 *                VAR c,s  : DOUBLEPRECISION);
123
 *)
140
 *)
141
142
CONST drot = LibDBlasL1F77.drot_;
143
124
          (*---------------------------------------------------------------*)
144
          (*---------------------------------------------------------------*)
125
          (* Applies a plane rotation.                                     *)
145
          (* Applies a plane rotation.                                     *)
126
          (* Jack Dongarra, linpack, 3/11/78.                              *)
146
          (* Jack Dongarra, linpack, 3/11/78.                              *)
127
          (*---------------------------------------------------------------*)
147
          (*---------------------------------------------------------------*)
128
148
129
CONST drotg = LibDBlasL1F77.drotg_;
130
131
(*
149
(*
132
 * PROCEDURE drotg(VAR da : DOUBLEPRECISION;  
150
 * PROCEDURE drotg(VAR da : DOUBLEPRECISION;  
133
 *                 VAR db : DOUBLEPRECISION;  
151
 *                 VAR db : DOUBLEPRECISION;  
134
 *                 VAR c  : DOUBLEPRECISION;  
152
 *                 VAR c  : DOUBLEPRECISION;  
135
 *                 VAR s  : DOUBLEPRECISION);
153
 *                 VAR s  : DOUBLEPRECISION);
136
 *)
154
 *)
155
156
CONST drotg = LibDBlasL1F77.drotg_;
157
137
          (*---------------------------------------------------------------*)
158
          (*---------------------------------------------------------------*)
138
          (* Construct a Givens plane rotation                             *)
159
          (* Construct a Givens plane rotation                             *)
139
          (* Jack Dongarra, linpack, 3/11/78.                              *)
160
          (* Jack Dongarra, linpack, 3/11/78.                              *)
140
          (*---------------------------------------------------------------*)
161
          (*---------------------------------------------------------------*)
141
162
142
CONST dscal = LibDBlasL1F77.dscal_;
143
144
(*
163
(*
145
 * PROCEDURE dscal(VAR n    : INTEGER4;
164
 * PROCEDURE dscal(VAR n    : INTEGER4;
146
 *                 VAR da   : DOUBLEPRECISION;
165
 *                 VAR da   : DOUBLEPRECISION;
147
 *                 VAR dx   : (* ARRAY OF *) DOUBLEPRECISION; 
166
 *                 VAR dx   : (* ARRAY OF *) DOUBLEPRECISION; 
148
 *                 VAR incx : INTEGER4);
167
 *                 VAR incx : INTEGER4);
149
 *)
168
 *)
169
170
CONST dscal = LibDBlasL1F77.dscal_;
171
150
          (*----------------------------------------------------------------*)
172
          (*----------------------------------------------------------------*)
151
          (* Scales a vector by a constant                                  *)
173
          (* Scales a vector by a constant                                  *)
152
          (*----------------------------------------------------------------*)
174
          (*----------------------------------------------------------------*)
153
154
CONST daxpy = LibDBlasL1F77.daxpy_;
155
175
156
(*
176
(*
157
 * PROCEDURE daxpy(VAR n    : INTEGER4;
177
 * PROCEDURE daxpy(VAR n    : INTEGER4;
158
 *                 VAR da   : DOUBLEPRECISION;
178
 *                 VAR da   : DOUBLEPRECISION;
159
 *                 VAR dx   : (* ARRAY OF *) DOUBLEPRECISION; 
179
 *                 VAR dx   : (* ARRAY OF *) DOUBLEPRECISION; 
160
 *                 VAR incx : INTEGER4;
180
 *                 VAR incx : INTEGER4;
161
 *                 VAR dy   : (* ARRAY OF *) DOUBLEPRECISION; 
181
 *                 VAR dy   : (* ARRAY OF *) DOUBLEPRECISION; 
162
 *                 VAR incy : INTEGER4);
182
 *                 VAR incy : INTEGER4);
163
 *)
183
 *)
184
185
CONST daxpy = LibDBlasL1F77.daxpy_;
186
164
          (*----------------------------------------------------------------*)
187
          (*----------------------------------------------------------------*)
165
          (* Constant times a vector plus a vector                          *)
188
          (* Constant times a vector plus a vector                          *)
166
          (*----------------------------------------------------------------*)
189
          (*----------------------------------------------------------------*)
167
168
CONST ddot = LibDBlasL1F77.ddot_;
169
190
170
(*
191
(*
171
 * PROCEDURE ddot(VAR N    : INTEGER4;
192
 * PROCEDURE ddot(VAR N    : INTEGER4;
172
 *                VAR DX   : (* ARRAY OF *) DOUBLEPRECISION;
193
 *                VAR DX   : (* ARRAY OF *) DOUBLEPRECISION;
173
 *                VAR INCX : INTEGER4;
194
 *                VAR INCX : INTEGER4;
174
 *                VAR DY   : (* ARRAY OF *) DOUBLEPRECISION;
195
 *                VAR DY   : (* ARRAY OF *) DOUBLEPRECISION;
175
 *                VAR INCY : INTEGER4) : DOUBLEPRECISION;
196
 *                VAR INCY : INTEGER4) : DOUBLEPRECISION;
176
 *)
197
 *)
198
199
CONST ddot = LibDBlasL1F77.ddot_;
200
177
          (*----------------------------------------------------------------*)
201
          (*----------------------------------------------------------------*)
178
          (* Forms the dot product of two vectors                           *)
202
          (* Forms the dot product of two vectors                           *)
179
          (*----------------------------------------------------------------*)
203
          (*----------------------------------------------------------------*)
180
181
CONST idamax = LibDBlasL1F77.idamax_;
182
204
183
(*
205
(*
184
 * PROCEDURE idamax(VAR n    : INTEGER4;
206
 * PROCEDURE idamax(VAR n    : INTEGER4;
185
 *                  VAR dx   : (* ARRAY OF *) DOUBLEPRECISION;
207
 *                  VAR dx   : (* ARRAY OF *) DOUBLEPRECISION;
186
 *                  VAR incx : INTEGER4) : INTEGER4;
208
 *                  VAR incx : INTEGER4) : INTEGER4;
187
 *)
209
 *)
210
211
CONST idamax = LibDBlasL1F77.idamax_;
212
188
          (*----------------------------------------------------------------*)
213
          (*----------------------------------------------------------------*)
189
          (* Finds the index of element having max. absolute value.         *)
214
          (* Finds the index of element having max. absolute value.         *)
190
          (*----------------------------------------------------------------*)
215
          (*----------------------------------------------------------------*)
191
192
CONST idamin = LibDBlasL1F77.idamin_;
193
216
194
(*
217
(*
195
 * PROCEDURE idamin(VAR n    : INTEGER4;
218
 * PROCEDURE idamin(VAR n    : INTEGER4;
196
 *                  VAR dx   : (* ARRAY OF *) DOUBLEPRECISION;
219
 *                  VAR dx   : (* ARRAY OF *) DOUBLEPRECISION;
197
 *                  VAR incx : INTEGER4) : INTEGER4;
220
 *                  VAR incx : INTEGER4) : INTEGER4;
198
 *)
221
 *)
222
223
CONST idamin = LibDBlasL1F77.idamin_;
224
199
          (*----------------------------------------------------------------*)
225
          (*----------------------------------------------------------------*)
200
          (* Finds the index of element having min. absolute value.         *)
226
          (* Finds the index of element having min. absolute value.         *)
201
          (*----------------------------------------------------------------*)
227
          (*----------------------------------------------------------------*)
202
203
CONST dasum = LibDBlasL1F77.dasum_;
204
228
205
(*
229
(*
206
 * PROCEDURE dasum(VAR dim      : INTEGER4;
230
 * PROCEDURE dasum(VAR dim      : INTEGER4;
207
 *                 VAR X        : (* ARRAY OF *) DOUBLEPRECISION;
231
 *                 VAR X        : (* ARRAY OF *) DOUBLEPRECISION;
208
 *                 VAR Inc      : INTEGER4) : DOUBLEPRECISION;
232
 *                 VAR Inc      : INTEGER4) : DOUBLEPRECISION;
209
 *)
233
 *)
234
235
CONST dasum = LibDBlasL1F77.dasum_;
236
210
          (*----------------------------------------------------------------*)
237
          (*----------------------------------------------------------------*)
211
          (* Berechnet die Summe der Absolutwerte der im Feld X gespeich-   *)
238
          (* Berechnet die Summe der Absolutwerte der im Feld X gespeich-   *)
212
          (* erten Zahlen.                                                  *)
239
          (* erten Zahlen.                                                  *)
213
          (*----------------------------------------------------------------*)
240
          (*----------------------------------------------------------------*)
214
241
242
(*
243
 * PROCEDURE dgemv(    Trans  : CHAR1;
244
 *                     M,N    : INTEGER4;
245
 *                     Alpha  : DOUBLEPRECISION;
246
 *                 VAR A      : ARRAY OF ARRAY OF DOUBLEPRECISION;
247
 *                     LDA    : INTEGER4;
248
 *                 VAR X      : ARRAY OF DOUBLEPRECISION;
249
 *                     IncX   : INTEGER4;
250
 *                     Beta   : DOUBLEPRECISION;
251
 *                 VAR Y      : ARRAY OF DOUBLEPRECISION;
252
 *                     IncY   : INTEGER4);
253
 *)
254
215
CONST sgemm = LibDBlasL3F77.dgemm;
255
CONST dgemv = LibDBlasL2F77.dgemv;
256
257
          (*----------------------------------------------------------------*)
258
          (* Aufruf der Fortran Version von BLAS2 subroutine dgemv          *)
259
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
260
          (* Parameter sorgt.                                               *)
261
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
262
          (* "normal" aufgerufen werden kann wie von Modula-2 her gewoehnt  *)
263
          (*----------------------------------------------------------------*)
216
264
217
(*
265
(*
218
 * PROCEDURE sgemm(    TA    : CHAR1;
266
 * PROCEDURE sgemm(    TA    : CHAR1;
219
 *                     TB    : CHAR1;
267
 *                     TB    : CHAR1;
220
 *                     M,N,K : INTEGER4;
268
 *                     M,N,K : INTEGER4;
...
...
225
 *                     ldb   : INTEGER4;
273
 *                     ldb   : INTEGER4;
226
 *                     Beta  : REAL4;
274
 *                     Beta  : REAL4;
227
 *                 VAR C     : ARRAY OF ARRAY OF REAL4;
275
 *                 VAR C     : ARRAY OF ARRAY OF REAL4;
228
 *                     ldc   : INTEGER4);
276
 *                     ldc   : INTEGER4);
229
 *)
277
 *)
278
279
CONST sgemm = LibDBlasL3F77.dgemm;
280
230
          (*----------------------------------------------------------------*)
281
          (*----------------------------------------------------------------*)
231
          (* Aufruf der Fortran Version von BLAS3 subroutine sgemm          *)
282
          (* Aufruf der Fortran Version von BLAS3 subroutine sgemm          *)
232
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
283
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
233
          (* Parameter sorgt.                                               *)
284
          (* Parameter sorgt.                                               *)
234
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
285
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
235
          (* "normal" aufgerufen werden kann wie von Modula-2 her gewoehnt  *)
286
          (* "normal" aufgerufen werden kann wie von Modula-2 her gewoehnt  *)
236
          (*----------------------------------------------------------------*)
287
          (*----------------------------------------------------------------*)
237
238
<* IF (__OPENMP__) THEN *>
239
CONST dgemm = LibDBlasL3F77.dgemmOMP;
240
<* ELSE *>
241
CONST dgemm = LibDBlasL3F77.dgemm;
242
<* END *>
243
288
244
(*
289
(*
245
 * PROCEDURE dgemm(    TA    : CHAR1;
290
 * PROCEDURE dgemm(    TA    : CHAR1;
246
 *                     TB    : CHAR1;
291
 *                     TB    : CHAR1;
247
 *                     M,N,K : INTEGER4;
292
 *                     M,N,K : INTEGER4;
...
...
252
 *                     ldb   : INTEGER4;
297
 *                     ldb   : INTEGER4;
253
 *                     Beta  : DOUBLEPRECISION;
298
 *                     Beta  : DOUBLEPRECISION;
254
 *                 VAR C     : ARRAY OF ARRAY OF DOUBLEPRECISION;
299
 *                 VAR C     : ARRAY OF ARRAY OF DOUBLEPRECISION;
255
 *                     ldc   : INTEGER4);
300
 *                     ldc   : INTEGER4);
256
 *)
301
 *)
302
303
<* IF (__OPENMP__) THEN *>
304
CONST dgemm = LibDBlasL3F77.dgemmOMP;
305
<* ELSE *>
306
CONST dgemm = LibDBlasL3F77.dgemm;
307
<* END *>
308
257
          (*----------------------------------------------------------------*)
309
          (*----------------------------------------------------------------*)
258
          (* Aufruf der Fortran Version von BLAS3 subroutine dgemm          *)
310
          (* Aufruf der Fortran Version von BLAS3 subroutine dgemm          *)
259
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
311
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
260
          (* Parameter sorgt.                                               *)
312
          (* Parameter sorgt.                                               *)
261
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
313
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
...
...
280
          (*   C      : Resulting matrix C                                  *)
332
          (*   C      : Resulting matrix C                                  *)
281
          (*   ldb    : The size of the first dimention of matrix C, if     *)
333
          (*   ldb    : The size of the first dimention of matrix C, if     *)
282
          (*            passing a matrix C[m,n], the value should be m      *)
334
          (*            passing a matrix C[m,n], the value should be m      *)
283
          (*----------------------------------------------------------------*)
335
          (*----------------------------------------------------------------*)
284
336
337
(*=========================== Complex valued procedures ====================*)
338
339
(*
340
 * PROCEDURE zswap(VAR N    : INTEGER4;
341
 *                 VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
342
 *                 VAR IncX : INTEGER4;
343
 *                 VAR Y    : (* ARRAY OF *) DOUBLECOMPLEX;
344
 *                 VAR IncY : INTEGER4);
345
 *)
346
347
CONST zswap = LibDBlasL1F77.zswap_;
348
349
          (*----------------------------------------------------------------*)
350
          (* Swap complex vectors X and Y                                   *)
351
          (*----------------------------------------------------------------*)
352
353
(*
354
 * PROCEDURE zcopy(VAR N    : INTEGER4;
355
 *                 VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
356
 *                 VAR IncX : INTEGER4;
357
 *                 VAR Y    : (* ARRAY OF *) DOUBLECOMPLEX;
358
 *                 VAR IncY : INTEGER4);
359
 *)
360
361
CONST zcopy = LibDBlasL1F77.zcopy_;
362
363
          (*----------------------------------------------------------------*)
364
          (* copies a vector, x, to a vector, y.                            *)
365
          (* uses unrolled loops for increments equal to one.               *)
366
          (* jack dongarra, linpack, 3/11/78.                               *)
367
          (* MRi, Modula-2 10.04.16 | 09.09.18 (complex version)            *)
368
          (*----------------------------------------------------------------*)
369
370
(*
371
 * PROCEDURE zdotc(VAR N    : INTEGER4;
372
 *                 VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
373
 *                 VAR IncX : INTEGER4;
374
 *                 VAR Y    : (* ARRAY OF *) DOUBLECOMPLEX;
375
 *                 VAR IncY : INTEGER4) : DOUBLECOMPLEX;
376
 *)
377
378
CONST zdotc = LibDBlasL1F77.zdotc_;
379
380
          (*----------------------------------------------------------------*)
381
          (* Forms the dot product of two vectors. Uses unrolled loops for  *)
382
          (* increments equal to one.                                       *)
383
          (*----------------------------------------------------------------*)
384
385
(*
386
 * PROCEDURE dznrm2(VAR N    : INTEGER4;
387
 *                  VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
388
 *                  VAR IncX : INTEGER4) : DOUBLEPRECISION;
389
 *)
390
391
CONST dznrm2 = LibDBlasL1F77.dznrm2_;
392
393
          (*----------------------------------------------------------------*)
394
          (* dznrm2 returns the euclidean norm of a vector so that          *)
395
          (* dznrm2 := sqrt( X**H*X )                                       *)
396
          (*----------------------------------------------------------------*)
397
398
(*
399
 * PROCEDURE zscal(VAR n    : INTEGER4;
400
 *                 VAR da   : DOUBLECOMPLEX;
401
 *                 VAR dx   : (* ARRAY OF *) DOUBLECOMPLEX;
402
 *                 VAR IncX : INTEGER4);
403
 *)
404
405
CONST zscal = LibDBlasL1F77.zscal_;
406
407
          (*----------------------------------------------------------------*)
408
          (* Scales a vector by a constant (UNROLLED version)               *)
409
          (*----------------------------------------------------------------*)
410
411
(*
412
 * PROCEDURE zaxpy(VAR n    : INTEGER4;
413
 *                 VAR da   : DOUBLECOMPLEX;
414
 *                 VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
415
 *                 VAR IncX : INTEGER4;
416
 *                 VAR Y    : (* ARRAY OF *) DOUBLECOMPLEX;
417
 *                 VAR IncY : INTEGER4);
418
 *)
419
420
CONST zaxpy = LibDBlasL1F77.zaxpy_;
421
422
423
          (*----------------------------------------------------------------*)
424
          (* constant times a vector plus a vector                          *)
425
          (*----------------------------------------------------------------*)
426
427
(*
428
 * PROCEDURE zdrot(VAR N    : INTEGER4;
429
 *                 VAR X    : (* ARRAY OF *) DOUBLECOMPLEX;
430
 *                 VAR IncX : INTEGER4;
431
 *                 VAR Y    : (* ARRAY OF *) DOUBLECOMPLEX;
432
 *                 VAR IncY : INTEGER4;
433
 *                 VAR c,s  : REAL4);
434
 *)
435
436
CONST zdrot = LibDBlasL1F77.zdrot_;
437
438
          (*----------------------------------------------------------------*)
439
          (* Applies a plane rotation.                                      *)
440
          (*----------------------------------------------------------------*)
441
442
(*
443
 * PROCEDURE zgemv(    Trans : CHAR; 
444
 *                     M,N   : INTEGER;
445
 *                     Alpha : LONGCOMPLEX;
446
 *                 VAR A     : ARRAY OF ARRAY OF LONGCOMPLEX;
447
 *                     lda   : INTEGER;
448
 *                 VAR X     : ARRAY OF LONGCOMPLEX;
449
 *                     IncX  : INTEGER;
450
 *                     Beta  : LONGCOMPLEX;
451
 *                 VAR Y     : ARRAY OF LONGCOMPLEX;
452
 *                     IncY  : INTEGER);
453
 *)
454
285
CONST zgemm = LibDBlasL3F77.zgemm;
455
CONST zgemv = LibDBlasL2F77.zgemv;
456
457
          (*----------------------------------------------------------------*)
458
          (* Aufruf der Fortran Version von BLAS2 subroutine zgemv          *)
459
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
460
          (* Parameter sorgt.                                               *)
461
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
462
          (* "normal" aufgerufen werden kann wie von Modula-2 her gewoehnt  *)
463
          (*                                                                *)
464
          (* Performs one of the matrix-vector operations                   *)
465
          (*                                                                *)
466
          (*   y = alpha*a *x + beta*y,   or                                *)
467
          (*   y = alpha*a'*x + beta*y,   or;                               *)
468
          (*   y = alpha*conjg(a')*x + beta*y,;                             *)
469
          (*                                                                *)
470
          (* where Alpha and Beta are scalars, X and Y are vectors          *)
471
          (* and A is an M by N matrix.                                     *)
472
          (*----------------------------------------------------------------*)
286
473
287
(*
474
(*
288
 * PROCEDURE zgemm(    TA    : CHAR1;
475
 * PROCEDURE zgemm(    TA    : CHAR1;
289
 *                     TB    : CHAR1;
476
 *                     TB    : CHAR1;
290
 *                     M,N,K : INTEGER4;
477
 *                     M,N,K : INTEGER4;
...
...
295
 *                     ldb   : INTEGER4;
482
 *                     ldb   : INTEGER4;
296
 *                     Beta  : DOUBLECOMPLEX;
483
 *                     Beta  : DOUBLECOMPLEX;
297
 *                 VAR C     : ARRAY OF ARRAY OF DOUBLECOMPLEX;
484
 *                 VAR C     : ARRAY OF ARRAY OF DOUBLECOMPLEX;
298
 *                     ldc   : INTEGER4);
485
 *                     ldc   : INTEGER4);
299
 *)
486
 *)
487
488
CONST zgemm = LibDBlasL3F77.zgemm;
489
300
          (*----------------------------------------------------------------*)
490
          (*----------------------------------------------------------------*)
301
          (* Aufruf der Fortran Version von BLAS3 subroutine zgemm          *)
491
          (* Aufruf der Fortran Version von BLAS3 subroutine zgemm          *)
302
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
492
          (* ueber Schnittstelle die fuer eine korrekte Umsetzung der       *)
303
          (* Parameter sorgt.                                               *)
493
          (* Parameter sorgt.                                               *)
304
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)
494
          (* Durch die Schnittstelle wird auch erreicht dass die Routine    *)