1 /* ---------------------------------------------------------------------
2 *
3 *  -- PBLAS routine (version 2.0) --
4 *     University of Tennessee, Knoxville, Oak Ridge National Laboratory,
5 *     and University of California, Berkeley.
6 *     March 12, 2002
7 *
8 *  ---------------------------------------------------------------------
9 */
10 /*
11 *  This file includes PBLAS tools definitions. All PBLAS routines include
12 *  this file.
13 *
14 * ----------------------------------------------------------------------
15 *  #define macro constants
16 *  ---------------------------------------------------------------------
17 *
18 *  Descriptor entries for type 1
19 */
20 #define    BLOCK_CYCLIC_2D     1
21 
22 #define    DTYPE1_             0                   /* Descriptor Type */
23 #define    CTXT1_              1                     /* BLACS context */
24 #define    M1_                 2             /* Global Number of Rows */
25 #define    N1_                 3          /* Global Number of Columns */
26 #define    MB1_                4                 /* Row Blocking Size */
27 #define    NB1_                5              /* Column Blocking Size */
28 #define    RSRC1_              6            /* Starting Processor Row */
29 #define    CSRC1_              7         /* Starting Processor Column */
30 #define    LLD1_               8           /* Local Leading Dimension */
31 #define    DLEN1_              9                 /* Descriptor Length */
32 /*
33 *  Descriptor entries for type 2
34 */
35 #define    BLOCK_CYCLIC_2D_INB 2
36 
37 #define    DTYPE_              0                   /* Descriptor Type */
38 #define    CTXT_               1                     /* BLACS context */
39 #define    M_                  2             /* Global Number of Rows */
40 #define    N_                  3          /* Global Number of Columns */
41 #define    IMB_                4         /* Initial Row Blocking Size */
42 #define    INB_                5      /* Initial Column Blocking Size */
43 #define    MB_                 6                 /* Row Blocking Size */
44 #define    NB_                 7              /* Column Blocking Size */
45 #define    RSRC_               8              /* Starting Process Row */
46 #define    CSRC_               9           /* Starting Process Column */
47 #define    LLD_                10          /* Local Leading Dimension */
48 #define    DLEN_               11                /* Descriptor Length */
49 
50 #define    CPACKING            'P'
51 #define    CUNPACKING          'U'
52 
53 #define    PACKING             "P"
54 #define    UNPACKING           "U"
55 
56 #define    CGENERAL            'G'
57 /* #define    CSYMM               'S'  */
58 #define    CHERM               'H'
59 
60 #define    GENERAL             "G"
61 #define    SYMM                "S"
62 #define    HERM                "H"
63 
64 #define    ONE                 1.0
65 #define    TWO                 2.0
66 #define    ZERO                0.0
67                             /* Input error checking related constants */
68 #define    DESCMULT            100
69 #define    BIGNUM              10000
70 /*
71 *  ---------------------------------------------------------------------
72 *  #define macro functions
73 *  ---------------------------------------------------------------------
74 */
75 #define    ABS( a_ )           ( ( (a_) <   0  ) ? -(a_) : (a_) )
76 #define    MIN( a_, b_ )       ( ( (a_) < (b_) ) ?  (a_) : (b_) )
77 #define    MAX( a_, b_ )       ( ( (a_) > (b_) ) ?  (a_) : (b_) )
78 
79 #define    FLOOR(a,b) (((a)>0) ? (((a)/(b))) : (-(((-(a))+(b)-1)/(b))))
80 #define    CEIL(a,b)           ( ( (a)+(b)-1 ) / (b) )
81 #define    ICEIL(a,b) (((a)>0) ? ((((a)+(b)-1)/(b))) : (-((-(a))/(b))))
82 
83 #define    Mupcase(C)          (((C)>96 && (C)<123) ? (C) & 0xDF : (C))
84 #define    Mlowcase(C)         (((C)>64 && (C)< 91) ? (C) | 32   : (C))
85 /*
86 *  The following macros perform common modulo operations;  All functions
87 *  except MPosMod assume arguments are < d (i.e., arguments are themsel-
88 *  ves within modulo range).
89 */
90                                                 /* increment with mod */
91 #define    MModInc(I, d)       if(++(I) == (d)) (I) = 0
92                                                 /* decrement with mod */
93 #define    MModDec(I, d)       if(--(I) == -1) (I) = (d)-1
94                                                    /* positive modulo */
95 #define    MPosMod(I, d)       ( (I) - ((I)/(d))*(d) )
96                                                    /* add two numbers */
97 #define    MModAdd(I1, I2, d) \
98            ( ( (I1) + (I2) < (d) ) ? (I1) + (I2) : (I1) + (I2) - (d) )
99                                                         /* add 1 to # */
100 #define    MModAdd1(I, d) ( ((I) != (d)-1) ? (I) + 1 : 0 )
101                                               /* subtract two numbers */
102 #define    MModSub(I1, I2, d) \
103            ( ( (I1) < (I2) ) ? (d) + (I1) - (I2) : (I1) - (I2) )
104                                                       /* sub 1 from # */
105 #define    MModSub1(I, d) ( ((I)!=0) ? (I)-1 : (d)-1 )
106 /*
107 *  DNROC computes maximum number of local rows or columns. This macro is
108 *  only used to compute the time estimates in the Level 3 PBLAS routines.
109 */
110 
111 #define    DNROC( n_, nb_, p_ ) \
112            ((double)(((((n_)+(nb_)-1)/(nb_))+(p_)-1)/(p_))*(double)((nb_)))
113 /*
114 *  Mptr returns a pointer to a_( i_, j_ ) for readability reasons and
115 *  also less silly errors ...
116 *
117 *  There was some problems with the previous code which read:
118 *
119 *      #define    Mptr( a_, i_, j_, lda_, siz_ ) \
120 *                    ( (a_) + ( ( (i_)+(j_)*(lda_) )*(siz_) ) )
121 *
122 *  since it can overflow the 32-bit integer "easily".
123 *  The following code should fix the problem.
124 *  It uses the "off_t" command.
125 *
126 *  Change made by Julien Langou on Sat. September 12, 2009.
127 *  Fix provided by John Moyard from CNES.
128 *
129 *  JL :April 2011: Change off_t by long long
130 *  off_t is not supported under Windows
131 */
132 #define    Mptr( a_, i_, j_, lda_, siz_ ) \
133               ( (a_) + ( (long long) ( (long long)(i_)+ \
134               (long long)(j_)*(long long)(lda_))*(long long)(siz_) ) )
135 /*
136 *  Mfirstnb and Mlastnb compute the global size of the first and last
137 *  block corresponding to the interval i_:i_+n_-1 of global indexes.
138 */
139 #define    Mfirstnb( inbt_, n_, i_, inb_, nb_ ) \
140               inbt_ = (inb_) - (i_); \
141               if( inbt_ <= 0 ) \
142                  inbt_ = ( (-inbt_) / (nb_) + 1 ) * (nb_) + inbt_; \
143               inbt_ = MIN( inbt_, (n_) );
144 
145 #define    Mlastnb( inbt_, n_, i_, inb_, nb_ ) \
146               inbt_ = (i_) + (n_) - (inb_); \
147               if( inbt_ > 0 ) \
148               { \
149                  inbt_ = -( ( (nb_)+inbt_-1 )/(nb_)-1 )*(nb_) + inbt_; \
150                  inbt_ = MIN( inbt_, (n_) ); \
151               } \
152               else { inbt_ = (n_); };
153 /*
154 *  Does the index interval i_:i_+n_-1 spans more than one process rows
155 *  or columns ?
156 *
157 *  Mspan returns 0 (false) when the data is replicated (srcproc_ < 0) or
158 *  when there is only one process row or column in the process grid.
159 */
160 #define    Mspan( n_, i_, inb_, nb_, srcproc_, nprocs_ ) \
161               ( ( (srcproc_) >= 0 ) && ( ( (nprocs_) > 1 ) && \
162               ( ( (i_) < (inb_) ) ? \
163                 ( (i_) + (n_) > (inb_) ) : \
164                 ( (i_) + (n_) > (inb_) + \
165                   ( ( (i_) - (inb_) ) / (nb_) + 1 ) * (nb_) ) ) ) )
166 /*
167 *  Mindxl2g computes the global index ig_ corresponding to the local
168 *  index il_ in process proc_.
169 */
170 #define    Mindxl2g( ig_, il_, inb_, nb_, proc_, srcproc_, nprocs_ ) \
171            { \
172               if( ( (srcproc_) >= 0 ) && ( (nprocs_) > 1 ) ) \
173               { \
174                  if( (proc_) == (srcproc_) ) \
175                  { \
176                     if( (il_) < (inb_) ) ig_ = (il_); \
177                     else                 ig_ = (il_) + \
178                        (nb_)*((nprocs_)-1)*( ((il_)-(inb_)) / (nb_) + 1 ); \
179                  } \
180                  else if( (proc_) < (srcproc_) ) \
181                  { \
182                     ig_ = (il_) + (inb_) + \
183                           (nb_)*(  ((nprocs_)-1)*((il_)/(nb_)) + \
184                                    (proc_)-(srcproc_)-1+(nprocs_) ); \
185                  } \
186                  else \
187                  { \
188                     ig_ =  (il_) + (inb_) + \
189                            (nb_)*( ((nprocs_)-1)*((il_)/(nb_)) + \
190                            (proc_)-(srcproc_)-1 ); \
191                  } \
192               } \
193               else \
194               { \
195                  ig_ = (il_); \
196               } \
197            }
198 /*
199 *  Mindxg2p returns the process coodinate owning the entry globally
200 *  indexed by ig_.
201 */
202 #define    Mindxg2p( ig_, inb_, nb_, proc_, srcproc_, nprocs_ ) \
203            { \
204               if( ( (ig_) >= (inb_) ) && ( (srcproc_) >= 0 ) && \
205                   ( (nprocs_) > 1 ) ) \
206               { \
207                  proc_  = (srcproc_) + 1 + ( (ig_)-(inb_) ) / (nb_); \
208                  proc_ -= ( proc_ / (nprocs_) ) * (nprocs_); \
209               } \
210               else \
211               { \
212                  proc_ = (srcproc_); \
213               } \
214            }
215 /*
216 *  Mnumroc computes the # of local indexes np_ residing in the process
217 *  of coordinate proc_ corresponding to the interval of global indexes
218 *  i_:i_+n_-1 assuming that the global index 0 resides in  the process
219 *  srcproc_, and that the indexes are distributed from  srcproc_ using
220 *  the parameters inb_, nb_ and nprocs_.
221 */
222 #define    Mnumroc( np_, n_, i_, inb_, nb_, proc_, srcproc_, nprocs_ ) \
223            { \
224               if( ( (srcproc_) >= 0 ) && ( (nprocs_) > 1 ) ) \
225               { \
226                  int inb__, mydist__, n__, nblk__, quot__, src__; \
227                  if( ( inb__ = (inb_) - (i_) ) <= 0 ) \
228                  { \
229                     src__  = (srcproc_) + ( nblk__ = (-inb__) / (nb_) + 1 ); \
230                     src__ -= ( src__ / (nprocs_) ) * (nprocs_); \
231                     inb__ += nblk__*(nb_); \
232                     if( ( n__ = (n_) - inb__ ) <= 0 ) \
233                     { if( (proc_) == src__ ) np_ = (n_); else np_ = 0; } \
234                     else \
235                     { \
236                        if( ( mydist__ = (proc_) - src__ ) < 0 ) \
237                           mydist__ += (nprocs_); \
238                        nblk__    = n__ / (nb_) + 1; \
239                        mydist__ -= nblk__ - \
240                           ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
241                        if( mydist__ < 0 ) \
242                        { \
243                           if( (proc_) != src__ ) \
244                              np_ = (nb_) + (nb_) * quot__; \
245                           else \
246                              np_ = inb__ + (nb_) * quot__; \
247                        } \
248                        else if( mydist__ > 0 ) \
249                        { \
250                           np_ = (nb_) * quot__; \
251                        } \
252                        else \
253                        { \
254                           if( (proc_) != src__ ) \
255                              np_ = n__ + (nb_) + (nb_) * ( quot__ - nblk__ ); \
256                           else \
257                              np_ = (n_) +        (nb_) * ( quot__ - nblk__ ); \
258                        } \
259                     } \
260                  } \
261                  else \
262                  { \
263                     if( ( n__ = (n_) - inb__ ) <= 0 ) \
264                     { if( (proc_) == (srcproc_) ) np_ = (n_); else np_ = 0; } \
265                     else \
266                     { \
267                        if( ( mydist__ = (proc_) - (srcproc_) ) < 0 ) \
268                           mydist__ += (nprocs_); \
269                        nblk__    = n__ / (nb_) + 1; \
270                        mydist__ -= nblk__ - \
271                           ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
272                        if( mydist__ < 0 ) \
273                        { \
274                           if( (proc_) != (srcproc_) ) \
275                              np_ = (nb_) + (nb_) * quot__; \
276                           else \
277                              np_ = inb__ + (nb_) * quot__; \
278                        } \
279                        else if( mydist__ > 0 ) \
280                        { \
281                           np_ = (nb_) * quot__; \
282                        } \
283                        else \
284                        { \
285                           if( (proc_) != (srcproc_) ) \
286                              np_ = n__ + (nb_) + (nb_) * ( quot__ - nblk__ ); \
287                           else \
288                              np_ = (n_) +        (nb_) * ( quot__ - nblk__ ); \
289                        } \
290                     } \
291                  } \
292               } \
293               else \
294               { \
295                  np_ = (n_); \
296               } \
297            }
298 
299 #define    Mnpreroc( np_, n_, i_, inb_, nb_, proc_, srcproc_, nprocs_ ) \
300            { \
301               if( ( (srcproc_) >= 0 ) && ( (nprocs_) > 1 ) ) \
302               { \
303                  int inb__, mydist__, n__, nblk__, quot__, rem__, src__; \
304                  if( ( inb__ = (inb_) - (i_) ) <= 0 ) \
305                  { \
306                     src__  = (srcproc_) + ( nblk__ = (-inb__) / (nb_) + 1 ); \
307                     src__ -= ( src__ / (nprocs_) ) * (nprocs_); \
308                     if( (proc_) != src__ ) \
309                     { \
310                        inb__ += nblk__*(nb_); \
311                        if( ( n__ = (n_) - inb__ ) <= 0 ) { np_ = (n_); } \
312                        else \
313                        { \
314                           if( ( mydist__ = (proc_) - src__ ) < 0 ) \
315                              mydist__ += (nprocs_); \
316                           nblk__ = n__ / (nb_) + 1; \
317                           rem__  = nblk__ - \
318                              ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
319                           if( mydist__ <= rem__ ) \
320                           { \
321                              np_ = inb__ - (nb_) + \
322                                    ( quot__ + 1 ) * mydist__ * (nb_); \
323                           } \
324                           else \
325                           { \
326                              np_ = (n_) + \
327                                    ( mydist__ - (nprocs_) ) * quot__ * (nb_); \
328                           } \
329                        } \
330                     } \
331                     else \
332                     { \
333                        np_ = 0; \
334                     } \
335                  } \
336                  else \
337                  { \
338                     if( (proc_) != (srcproc_) ) \
339                     { \
340                        if( ( n__ = (n_) - inb__ ) <= 0 ) { np_ = (n_); } \
341                        else \
342                        { \
343                           if( ( mydist__ = (proc_) - (srcproc_) ) < 0 ) \
344                              mydist__ += (nprocs_); \
345                           nblk__ = n__ / (nb_) + 1; \
346                           rem__  = nblk__ - \
347                              ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
348                           if( mydist__ <= rem__ ) \
349                           { \
350                              np_ = inb__ - (nb_) + \
351                                    ( quot__ + 1 ) * mydist__ * (nb_); \
352                           } \
353                           else \
354                           { \
355                              np_ = (n_) + \
356                                    ( mydist__ - (nprocs_) ) * quot__ * (nb_); \
357                           } \
358                        } \
359                     } \
360                     else \
361                     { \
362                        np_ = 0; \
363                     } \
364                  } \
365               } \
366               else \
367               { \
368                  np_ = 0; \
369               } \
370            }
371 
372 #define    Mnnxtroc( np_, n_, i_, inb_, nb_, proc_, srcproc_, nprocs_ ) \
373            { \
374               if( ( (srcproc_) >= 0 ) && ( (nprocs_) > 1 ) ) \
375               { \
376                  int inb__, mydist__, n__, nblk__, quot__, rem__, src__; \
377                  if( ( inb__ = (inb_) - (i_) ) <= 0 ) \
378                  { \
379                     src__  = (srcproc_) + ( nblk__ = (-inb__) / (nb_) + 1 ); \
380                     src__ -= ( src__ / (nprocs_) ) * (nprocs_); \
381                     inb__ += nblk__*(nb_); \
382                     if( ( n__ = (n_) - inb__ ) <= 0 ) { np_ = 0; } \
383                     else \
384                     { \
385                        if( ( mydist__ = (proc_) - src__ ) < 0 ) \
386                           mydist__ += (nprocs_); \
387                        nblk__ = n__ / (nb_) + 1; \
388                        rem__  = nblk__ - \
389                              ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
390                        if( mydist__ < rem__ ) \
391                        { \
392                           np_ = n__ - ( quot__ * mydist__ + \
393                                         quot__ + mydist__ ) * (nb_); \
394                        } \
395                        else \
396                        { \
397                           np_ = ( (nprocs_) - 1 - mydist__ ) * quot__ * (nb_); \
398                        } \
399                     } \
400                  } \
401                  else \
402                  { \
403                     if( ( n__ = (n_) - inb__ ) <= 0 ) { np_ = 0; } \
404                     else \
405                     { \
406                        if( ( mydist__ = (proc_) - (srcproc_) ) < 0 ) \
407                           mydist__ += (nprocs_); \
408                        nblk__ = n__ / (nb_) + 1; \
409                        rem__  = nblk__ - \
410                              ( quot__ = ( nblk__ / (nprocs_) ) ) * (nprocs_); \
411                        if( mydist__ < rem__ ) \
412                        { \
413                           np_ = n__ - ( quot__ * mydist__ + \
414                                         quot__ + mydist__ ) * (nb_); \
415                        } \
416                        else \
417                        { \
418                           np_ = ( (nprocs_) - 1 - mydist__ ) * quot__ * (nb_); \
419                        } \
420                     } \
421                  } \
422               } \
423               else \
424               { np_ = 0; } \
425            }
426 
427 
428 #define    Minfog2l( i_, j_, desc_, nr_, nc_, r_, c_, ii_, jj_, pr_, pc_ ) \
429            { \
430               int quot__, i__, imb__, inb__, j__, mb__, mydist__, \
431                   nb__, nblk__, src__; \
432               imb__ = desc_[IMB_]; mb__ = desc_[MB_]; pr_ = desc_[RSRC_]; \
433               if( ( pr_ >= 0 ) && ( nr_ > 1 ) ) \
434               { \
435                  if( ( i__ = (i_) - imb__ ) < 0 ) \
436                  { ii_ = ( r_ == pr_ ? (i_) : 0 ); } \
437                  else \
438                  { \
439                     src__     = pr_; \
440                     pr_      += ( nblk__ = i__ / mb__ + 1 ); \
441                     pr_      -= ( pr_ / nr_ ) * nr_; \
442                     if( ( mydist__ = r_ - src__ ) < 0 ) mydist__ += nr_; \
443                     if( mydist__ >= nblk__ - ( quot__ = nblk__ / nr_ ) * nr_ ) \
444                     { \
445                        if( r_ != src__ ) ii_ =  mb__; \
446                        else              ii_ = imb__; \
447                        if( r_ != pr_ ) \
448                           ii_ += ( quot__ - 1 ) * mb__; \
449                        else \
450                           ii_ += i__ + ( quot__ - nblk__ ) * mb__; \
451                     } \
452                     else \
453                     { \
454                        if( r_ != src__ ) ii_ =  mb__ + quot__ * mb__; \
455                        else              ii_ = imb__ + quot__ * mb__; \
456                     } \
457                  } \
458               } \
459               else \
460               { \
461                  ii_ = (i_); \
462               } \
463               inb__ = desc_[INB_]; nb__ = desc_[NB_]; pc_ = desc_[CSRC_]; \
464               if( ( pc_ >= 0 ) && ( nc_ > 1 ) ) \
465               { \
466                  if( ( j__ = (j_) - inb__ ) < 0 ) \
467                  { jj_ = ( c_ == pc_ ? (j_) : 0 ); } \
468                  else \
469                  { \
470                     src__     = pc_; \
471                     pc_      += ( nblk__ = j__ / nb__ + 1 ); \
472                     pc_      -= ( pc_ / nc_ ) * nc_; \
473                     if( ( mydist__ = c_ - src__ ) < 0 ) mydist__ += nc_; \
474                     if( mydist__ >= nblk__ - ( quot__ = nblk__ / nc_ ) * nc_ ) \
475                     { \
476                        if( c_ != src__ ) jj_ =  nb__; \
477                        else              jj_ = inb__; \
478                        if( c_ != pc_ ) \
479                           jj_ += ( quot__ - 1 ) * nb__; \
480                        else \
481                           jj_ += j__ + ( quot__ - nblk__ ) * nb__; \
482                     } \
483                     else \
484                     { \
485                        if( c_ != src__ ) jj_ =  nb__ + quot__ * nb__; \
486                        else              jj_ = inb__ + quot__ * nb__; \
487                     } \
488                  } \
489               } \
490               else \
491               { \
492                  jj_ = (j_); \
493               } \
494            }
495 
496 /*
497 *  The following macros initialize or translate descriptors.
498 */
499 #define    MDescSet( desc, m, n, imb, inb, mb, nb, rsrc, csrc, ictxt, lld ) \
500            { \
501               (desc)[DTYPE_] = BLOCK_CYCLIC_2D_INB; \
502               (desc)[CTXT_ ] = (ictxt); \
503               (desc)[M_    ] = (m);     \
504               (desc)[N_    ] = (n);     \
505               (desc)[IMB_  ] = (imb);   \
506               (desc)[INB_  ] = (inb);   \
507               (desc)[MB_   ] = (mb);    \
508               (desc)[NB_   ] = (nb);    \
509               (desc)[RSRC_ ] = (rsrc);  \
510               (desc)[CSRC_ ] = (csrc);  \
511               (desc)[LLD_  ] = (lld);   \
512            }
513 
514 #define    MDescCopy(DescIn, DescOut) \
515            { \
516               (DescOut)[DTYPE_] = (DescIn)[DTYPE_];    \
517               (DescOut)[M_    ] = (DescIn)[M_    ];    \
518               (DescOut)[N_    ] = (DescIn)[N_    ];    \
519               (DescOut)[IMB_  ] = (DescIn)[IMB_  ];    \
520               (DescOut)[INB_  ] = (DescIn)[INB_  ];    \
521               (DescOut)[MB_   ] = (DescIn)[MB_   ];    \
522               (DescOut)[NB_   ] = (DescIn)[NB_   ];    \
523               (DescOut)[RSRC_ ] = (DescIn)[RSRC_ ];    \
524               (DescOut)[CSRC_ ] = (DescIn)[CSRC_ ];    \
525               (DescOut)[CTXT_ ] = (DescIn)[CTXT_ ];    \
526               (DescOut)[LLD_  ] = (DescIn)[LLD_  ];    \
527            }
528 
529 #define    MDescTrans(DescIn, DescOut) \
530            { \
531               if ( (DescIn)[DTYPE_] == BLOCK_CYCLIC_2D ) \
532               { \
533                  (DescOut)[DTYPE_] = BLOCK_CYCLIC_2D_INB; \
534                  (DescOut)[M_    ] = (DescIn)[M1_    ];   \
535                  (DescOut)[N_    ] = (DescIn)[N1_    ];   \
536                  (DescOut)[IMB_  ] = (DescIn)[MB1_   ];   \
537                  (DescOut)[INB_  ] = (DescIn)[NB1_   ];   \
538                  (DescOut)[MB_   ] = (DescIn)[MB1_   ];   \
539                  (DescOut)[NB_   ] = (DescIn)[NB1_   ];   \
540                  (DescOut)[RSRC_ ] = (DescIn)[RSRC1_ ];   \
541                  (DescOut)[CSRC_ ] = (DescIn)[CSRC1_ ];   \
542                  (DescOut)[CTXT_ ] = (DescIn)[CTXT1_ ];   \
543                  (DescOut)[LLD_  ] = (DescIn)[LLD1_  ];   \
544               } \
545               else if ( (DescIn)[DTYPE_] == BLOCK_CYCLIC_2D_INB ) \
546               { \
547                  (DescOut)[DTYPE_] = BLOCK_CYCLIC_2D_INB; \
548                  (DescOut)[M_    ] = (DescIn)[M_    ];    \
549                  (DescOut)[N_    ] = (DescIn)[N_    ];    \
550                  (DescOut)[IMB_  ] = (DescIn)[IMB_  ];    \
551                  (DescOut)[INB_  ] = (DescIn)[INB_  ];    \
552                  (DescOut)[MB_   ] = (DescIn)[MB_   ];    \
553                  (DescOut)[NB_   ] = (DescIn)[NB_   ];    \
554                  (DescOut)[RSRC_ ] = (DescIn)[RSRC_ ];    \
555                  (DescOut)[CSRC_ ] = (DescIn)[CSRC_ ];    \
556                  (DescOut)[CTXT_ ] = (DescIn)[CTXT_ ];    \
557                  (DescOut)[LLD_  ] = (DescIn)[LLD_  ];    \
558               } \
559               else \
560               { \
561                  (DescOut)[DTYPE_] = (DescIn)[0]; \
562                  (DescOut)[CTXT_ ] = (DescIn)[1]; \
563                  (DescOut)[M_    ] = 0;           \
564                  (DescOut)[N_    ] = 0;           \
565                  (DescOut)[IMB_  ] = 1;           \
566                  (DescOut)[INB_  ] = 1;           \
567                  (DescOut)[MB_   ] = 1;           \
568                  (DescOut)[NB_   ] = 1;           \
569                  (DescOut)[RSRC_ ] = 0;           \
570                  (DescOut)[CSRC_ ] = 0;           \
571                  (DescOut)[LLD_  ] = 1;           \
572               } \
573            }
574 
575 #define    MIndxTrans( I, J, i, j ) \
576            { \
577               i = *I - 1; \
578               j = *J - 1; \
579            }
580 
581 #if( _F2C_CALL_ == _F2C_ADD_ )
582 /*
583 *  These defines  set  up  the  naming scheme required to have a FORTRAN
584 *  routine called by a C routine. No redefinition is necessary  to  have
585 *  the following FORTRAN to C interface:
586 *
587 *           FORTRAN DECLARATION            C CALL
588 *           SUBROUTINE PDFOO(...)          pdfoo_(...)
589 *
590 *  This is the PBLAS default.
591 */
592 
593 #endif
594 
595 #if( _F2C_CALL_ == _F2C_F77ISF2C )
596 /*
597 *  These defines  set  up  the  naming scheme required to have a FORTRAN
598 *  routine called by a C routine for systems where  the FORTRAN compiler
599 *  is actually f2c (a FORTRAN to C conversion utility).
600 *
601 *           FORTRAN DECLARATION            C CALL
602 *           SUBROUTINE PDFOO(...)          pdfoo__(...)
603 */
604 
605 #endif
606 
607 #if( _F2C_CALL_ == _F2C_UPCASE )
608 /*
609 *  These defines  set  up  the  naming scheme required to have a FORTRAN
610 *  routine called by a C routine with the following  FORTRAN to C inter-
611 *  face:
612 *
613 *           FORTRAN DECLARATION            C CALL
614 *           SUBROUTINE PDFOO(...)          PDFOO(...)
615 */
616 #define    immadd_             IMMADD
617 #define    smmadd_             SMMADD
618 #define    dmmadd_             DMMADD
619 #define    cmmadd_             CMMADD
620 #define    zmmadd_             ZMMADD
621 
622 #define    immtadd_            IMMTADD
623 #define    smmtadd_            SMMTADD
624 #define    dmmtadd_            DMMTADD
625 #define    cmmtadd_            CMMTADD
626 #define    zmmtadd_            ZMMTADD
627 
628 #define    smmcadd_            SMMCADD
629 #define    dmmcadd_            DMMCADD
630 #define    cmmcadd_            CMMCADD
631 #define    zmmcadd_            ZMMCADD
632 
633 #define    smmtcadd_           SMMTCADD
634 #define    dmmtcadd_           DMMTCADD
635 #define    cmmtcadd_           CMMTCADD
636 #define    zmmtcadd_           ZMMTCADD
637 
638 #define    immdda_             IMMDDA
639 #define    smmdda_             SMMDDA
640 #define    dmmdda_             DMMDDA
641 #define    cmmdda_             CMMDDA
642 #define    zmmdda_             ZMMDDA
643 
644 #define    smmddac_            SMMDDAC
645 #define    dmmddac_            DMMDDAC
646 #define    cmmddac_            CMMDDAC
647 #define    zmmddac_            ZMMDDAC
648 
649 #define    immddat_            IMMDDAT
650 #define    smmddat_            SMMDDAT
651 #define    dmmddat_            DMMDDAT
652 #define    cmmddat_            CMMDDAT
653 #define    zmmddat_            ZMMDDAT
654 
655 #define    smmddact_           SMMDDACT
656 #define    dmmddact_           DMMDDACT
657 #define    cmmddact_           CMMDDACT
658 #define    zmmddact_           ZMMDDACT
659 
660 #define    sasqrtb_            SASQRTB
661 #define    dasqrtb_            DASQRTB
662 
663 #define    sset_               SSET
664 #define    dset_               DSET
665 #define    cset_               CSET
666 #define    zset_               ZSET
667 
668 #define    svasum_             SVASUM
669 #define    dvasum_             DVASUM
670 #define    scvasum_            SCVASUM
671 #define    dzvasum_            DZVASUM
672 
673 #define    sascal_             SASCAL
674 #define    dascal_             DASCAL
675 
676 #define    scshft_             SCSHFT
677 #define    dcshft_             DCSHFT
678 #define    ccshft_             CCSHFT
679 #define    zcshft_             ZCSHFT
680 
681 #define    srshft_             SRSHFT
682 #define    drshft_             DRSHFT
683 #define    crshft_             CRSHFT
684 #define    zrshft_             ZRSHFT
685 
686 #define    svvdot_             SVVDOT
687 #define    dvvdot_             DVVDOT
688 #define    cvvdotc_            CVVDOTC
689 #define    cvvdotu_            CVVDOTU
690 #define    zvvdotc_            ZVVDOTC
691 #define    zvvdotu_            ZVVDOTU
692 
693 #define    stzpad_             STZPAD
694 #define    dtzpad_             DTZPAD
695 #define    ctzpad_             CTZPAD
696 #define    ztzpad_             ZTZPAD
697 
698 #define    stzpadcpy_          STZPADCPY
699 #define    dtzpadcpy_          DTZPADCPY
700 #define    ctzpadcpy_          CTZPADCPY
701 #define    ztzpadcpy_          ZTZPADCPY
702 
703 #define    stzscal_            STZSCAL
704 #define    dtzscal_            DTZSCAL
705 #define    ctzscal_            CTZSCAL
706 #define    ztzscal_            ZTZSCAL
707 
708 #define    chescal_            CHESCAL
709 #define    zhescal_            ZHESCAL
710 
711 #define    ctzcnjg_            CTZCNJG
712 #define    ztzcnjg_            ZTZCNJG
713 
714 #define    sagemv_             SAGEMV
715 #define    dagemv_             DAGEMV
716 #define    cagemv_             CAGEMV
717 #define    zagemv_             ZAGEMV
718 
719 #define    sasymv_             SASYMV
720 #define    dasymv_             DASYMV
721 #define    casymv_             CASYMV
722 #define    zasymv_             ZASYMV
723 #define    cahemv_             CAHEMV
724 #define    zahemv_             ZAHEMV
725 
726 #define    satrmv_             SATRMV
727 #define    datrmv_             DATRMV
728 #define    catrmv_             CATRMV
729 #define    zatrmv_             ZATRMV
730 
731 #define    csymv_              CSYMV
732 #define    zsymv_              ZSYMV
733 
734 #define    csyr_               CSYR
735 #define    zsyr_               ZSYR
736 
737 #define    csyr2_              CSYR2
738 #define    zsyr2_              ZSYR2
739 
740 #endif
741 
742 #if( _F2C_CALL_ == _F2C_NOCHANGE )
743 /*
744 *  These defines  set  up  the  naming scheme required to have a FORTRAN
745 *  routine called by a C routine with the following  FORTRAN to C inter-
746 *  face:
747 *
748 *           FORTRAN DECLARATION            C CALL
749 *           SUBROUTINE PDFOO(...)          pdfoo(...)
750 */
751 #define    immadd_             immadd
752 #define    smmadd_             smmadd
753 #define    dmmadd_             dmmadd
754 #define    cmmadd_             cmmadd
755 #define    zmmadd_             zmmadd
756 
757 #define    immtadd_            immtadd
758 #define    smmtadd_            smmtadd
759 #define    dmmtadd_            dmmtadd
760 #define    cmmtadd_            cmmtadd
761 #define    zmmtadd_            zmmtadd
762 
763 #define    smmcadd_            smmcadd
764 #define    dmmcadd_            dmmcadd
765 #define    cmmcadd_            cmmcadd
766 #define    zmmcadd_            zmmcadd
767 
768 #define    smmtcadd_           smmtcadd
769 #define    dmmtcadd_           dmmtcadd
770 #define    cmmtcadd_           cmmtcadd
771 #define    zmmtcadd_           zmmtcadd
772 
773 #define    immdda_             immdda
774 #define    smmdda_             smmdda
775 #define    dmmdda_             dmmdda
776 #define    cmmdda_             cmmdda
777 #define    zmmdda_             zmmdda
778 
779 #define    smmddac_            smmddac
780 #define    dmmddac_            dmmddac
781 #define    cmmddac_            cmmddac
782 #define    zmmddac_            zmmddac
783 
784 #define    immddat_            immddat
785 #define    smmddat_            smmddat
786 #define    dmmddat_            dmmddat
787 #define    cmmddat_            cmmddat
788 #define    zmmddat_            zmmddat
789 
790 #define    smmddact_           smmddact
791 #define    dmmddact_           dmmddact
792 #define    cmmddact_           cmmddact
793 #define    zmmddact_           zmmddact
794 
795 #define    sasqrtb_            sasqrtb
796 #define    dasqrtb_            dasqrtb
797 
798 #define    sset_               sset
799 #define    dset_               dset
800 #define    cset_               cset
801 #define    zset_               zset
802 
803 #define    svasum_             svasum
804 #define    dvasum_             dvasum
805 #define    scvasum_            scvasum
806 #define    dzvasum_            dzvasum
807 
808 #define    sascal_             sascal
809 #define    dascal_             dascal
810 
811 #define    scshft_             scshft
812 #define    dcshft_             dcshft
813 #define    ccshft_             ccshft
814 #define    zcshft_             zcshft
815 
816 #define    srshft_             srshft
817 #define    drshft_             drshft
818 #define    crshft_             crshft
819 #define    zrshft_             zrshft
820 
821 #define    svvdot_             svvdot
822 #define    dvvdot_             dvvdot
823 #define    cvvdotc_            cvvdotc
824 #define    cvvdotu_            cvvdotu
825 #define    zvvdotc_            zvvdotc
826 #define    zvvdotu_            zvvdotu
827 
828 #define    stzpad_             stzpad
829 #define    dtzpad_             dtzpad
830 #define    ctzpad_             ctzpad
831 #define    ztzpad_             ztzpad
832 
833 #define    stzpadcpy_          stzpadcpy
834 #define    dtzpadcpy_          dtzpadcpy
835 #define    ctzpadcpy_          ctzpadcpy
836 #define    ztzpadcpy_          ztzpadcpy
837 
838 #define    stzscal_            stzscal
839 #define    dtzscal_            dtzscal
840 #define    ctzscal_            ctzscal
841 #define    ztzscal_            ztzscal
842 
843 #define    chescal_            chescal
844 #define    zhescal_            zhescal
845 
846 #define    ctzcnjg_            ctzcnjg
847 #define    ztzcnjg_            ztzcnjg
848 
849 #define    sagemv_             sagemv
850 #define    dagemv_             dagemv
851 #define    cagemv_             cagemv
852 #define    zagemv_             zagemv
853 
854 #define    sasymv_             sasymv
855 #define    dasymv_             dasymv
856 #define    casymv_             casymv
857 #define    zasymv_             zasymv
858 #define    cahemv_             cahemv
859 #define    zahemv_             zahemv
860 
861 #define    satrmv_             satrmv
862 #define    datrmv_             datrmv
863 #define    catrmv_             catrmv
864 #define    zatrmv_             zatrmv
865 
866 #define    csymv_              csymv
867 #define    zsymv_              zsymv
868 
869 #define    csyr_               csyr
870 #define    zsyr_               zsyr
871 
872 #define    csyr2_              csyr2
873 #define    zsyr2_              zsyr2
874 
875 #endif
876 /*
877 *  ---------------------------------------------------------------------
878 *  Function prototypes
879 *  ---------------------------------------------------------------------
880 */
881 #ifdef __STDC__
882 
883 F_VOID_FCT     immadd_         ( int *,     int *,     char *,
884                                  char *,    int *,     char *,
885                                  char *,    int * );
886 F_VOID_FCT     smmadd_         ( int *,     int *,     char *,
887                                  char *,    int *,     char *,
888                                  char *,    int * );
889 F_VOID_FCT     dmmadd_         ( int *,     int *,     char *,
890                                  char *,    int *,     char *,
891                                  char *,    int * );
892 F_VOID_FCT     cmmadd_         ( int *,     int *,     char *,
893                                  char *,    int *,     char *,
894                                  char *,    int * );
895 F_VOID_FCT     zmmadd_         ( int *,     int *,     char *,
896                                  char *,    int *,     char *,
897                                  char *,    int * );
898 
899 F_VOID_FCT     smmcadd_        ( int *,     int *,     char *,
900                                  char *,    int *,     char *,
901                                  char *,    int * );
902 F_VOID_FCT     dmmcadd_        ( int *,     int *,     char *,
903                                  char *,    int *,     char *,
904                                  char *,    int * );
905 F_VOID_FCT     cmmcadd_        ( int *,     int *,     char *,
906                                  char *,    int *,     char *,
907                                  char *,    int * );
908 F_VOID_FCT     zmmcadd_        ( int *,     int *,     char *,
909                                  char *,    int *,     char *,
910                                  char *,    int * );
911 
912 F_VOID_FCT     immtadd_        ( int *,     int *,     char *,
913                                  char *,    int *,     char *,
914                                  char *,    int * );
915 F_VOID_FCT     smmtadd_        ( int *,     int *,     char *,
916                                  char *,    int *,     char *,
917                                  char *,    int * );
918 F_VOID_FCT     dmmtadd_        ( int *,     int *,     char *,
919                                  char *,    int *,     char *,
920                                  char *,    int * );
921 F_VOID_FCT     cmmtadd_        ( int *,     int *,     char *,
922                                  char *,    int *,     char *,
923                                  char *,    int * );
924 F_VOID_FCT     zmmtadd_        ( int *,     int *,     char *,
925                                  char *,    int *,     char *,
926                                  char *,    int * );
927 
928 F_VOID_FCT     smmtcadd_       ( int *,     int *,     char *,
929                                  char *,    int *,     char *,
930                                  char *,    int * );
931 F_VOID_FCT     dmmtcadd_       ( int *,     int *,     char *,
932                                  char *,    int *,     char *,
933                                  char *,    int * );
934 F_VOID_FCT     cmmtcadd_       ( int *,     int *,     char *,
935                                  char *,    int *,     char *,
936                                  char *,    int * );
937 F_VOID_FCT     zmmtcadd_       ( int *,     int *,     char *,
938                                  char *,    int *,     char *,
939                                  char *,    int * );
940 
941 F_VOID_FCT     immdda_         ( int *,     int *,     char *,
942                                  char *,    int *,     char *,
943                                  char *,    int * );
944 F_VOID_FCT     smmdda_         ( int *,     int *,     char *,
945                                  char *,    int *,     char *,
946                                  char *,    int * );
947 F_VOID_FCT     dmmdda_         ( int *,     int *,     char *,
948                                  char *,    int *,     char *,
949                                  char *,    int * );
950 F_VOID_FCT     cmmdda_         ( int *,     int *,     char *,
951                                  char *,    int *,     char *,
952                                  char *,    int * );
953 F_VOID_FCT     zmmdda_         ( int *,     int *,     char *,
954                                  char *,    int *,     char *,
955                                  char *,    int * );
956 
957 F_VOID_FCT     smmddac_        ( int *,     int *,     char *,
958                                  char *,    int *,     char *,
959                                  char *,    int * );
960 F_VOID_FCT     dmmddac_        ( int *,     int *,     char *,
961                                  char *,    int *,     char *,
962                                  char *,    int * );
963 F_VOID_FCT     cmmddac_        ( int *,     int *,     char *,
964                                  char *,    int *,     char *,
965                                  char *,    int * );
966 F_VOID_FCT     zmmddac_        ( int *,     int *,     char *,
967                                  char *,    int *,     char *,
968                                  char *,    int * );
969 
970 F_VOID_FCT     immddat_        ( int *,     int *,     char *,
971                                  char *,    int *,     char *,
972                                  char *,    int * );
973 F_VOID_FCT     smmddat_        ( int *,     int *,     char *,
974                                  char *,    int *,     char *,
975                                  char *,    int * );
976 F_VOID_FCT     dmmddat_        ( int *,     int *,     char *,
977                                  char *,    int *,     char *,
978                                  char *,    int * );
979 F_VOID_FCT     cmmddat_        ( int *,     int *,     char *,
980                                  char *,    int *,     char *,
981                                  char *,    int * );
982 F_VOID_FCT     zmmddat_        ( int *,     int *,     char *,
983                                  char *,    int *,     char *,
984                                  char *,    int * );
985 
986 F_VOID_FCT     smmddact_       ( int *,     int *,     char *,
987                                  char *,    int *,     char *,
988                                  char *,    int * );
989 F_VOID_FCT     dmmddact_       ( int *,     int *,     char *,
990                                  char *,    int *,     char *,
991                                  char *,    int * );
992 F_VOID_FCT     cmmddact_       ( int *,     int *,     char *,
993                                  char *,    int *,     char *,
994                                  char *,    int * );
995 F_VOID_FCT     zmmddact_       ( int *,     int *,     char *,
996                                  char *,    int *,     char *,
997                                  char *,    int * );
998 
999 F_VOID_FCT     sasqrtb_        ( float *,   float *,   float * );
1000 F_VOID_FCT     dasqrtb_        ( double *,  double *,  double * );
1001 
1002 F_VOID_FCT     sset_           ( int *,     char *,    char *,
1003                                  int * );
1004 F_VOID_FCT     dset_           ( int *,     char *,    char *,
1005                                  int * );
1006 F_VOID_FCT     cset_           ( int *,     char *,    char *,
1007                                  int * );
1008 F_VOID_FCT     zset_           ( int *,     char *,    char *,
1009                                  int * );
1010 
1011 F_VOID_FCT     svasum_         ( int *,     char *,    char *,
1012                                  int * );
1013 F_VOID_FCT     dvasum_         ( int *,     char *,    char *,
1014                                  int * );
1015 F_VOID_FCT     scvasum_        ( int *,     char *,    char *,
1016                                  int * );
1017 F_VOID_FCT     dzvasum_        ( int *,     char *,    char *,
1018                                  int * );
1019 
1020 F_VOID_FCT     sascal_         ( int *,     char *,    char *,
1021                                  int * );
1022 F_VOID_FCT     dascal_         ( int *,     char *,    char *,
1023                                  int * );
1024 
1025 F_VOID_FCT     scshft_         ( int *,     int *,     int *,
1026                                  char *,    int * );
1027 F_VOID_FCT     dcshft_         ( int *,     int *,     int *,
1028                                  char *,    int * );
1029 F_VOID_FCT     ccshft_         ( int *,     int *,     int *,
1030                                  char *,    int * );
1031 F_VOID_FCT     zcshft_         ( int *,     int *,     int *,
1032                                  char *,    int * );
1033 
1034 F_VOID_FCT     srshft_         ( int *,     int *,     int *,
1035                                  char *,    int * );
1036 F_VOID_FCT     drshft_         ( int *,     int *,     int *,
1037                                  char *,    int * );
1038 F_VOID_FCT     crshft_         ( int *,     int *,     int *,
1039                                  char *,    int * );
1040 F_VOID_FCT     zrshft_         ( int *,     int *,     int *,
1041                                  char *,    int * );
1042 
1043 F_VOID_FCT     svvdot_         ( int *,     char *,    char *,
1044                                  int *,     char *,    int * );
1045 F_VOID_FCT     dvvdot_         ( int *,     char *,    char *,
1046                                  int *,     char *,    int * );
1047 F_VOID_FCT     cvvdotu_        ( int *,     char *,    char *,
1048                                  int *,     char *,    int * );
1049 F_VOID_FCT     cvvdotc_        ( int *,     char *,    char *,
1050                                  int *,     char *,    int * );
1051 F_VOID_FCT     zvvdotu_        ( int *,     char *,    char *,
1052                                  int *,     char *,    int * );
1053 F_VOID_FCT     zvvdotc_        ( int *,     char *,    char *,
1054                                  int *,     char *,    int * );
1055 
1056 F_VOID_FCT     stzpad_         ( F_CHAR_T,  F_CHAR_T,  int *,
1057                                  int *,     int *,     char *,
1058                                  char *,    char *,    int * );
1059 F_VOID_FCT     dtzpad_         ( F_CHAR_T,  F_CHAR_T,  int *,
1060                                  int *,     int *,     char *,
1061                                  char *,    char *,    int * );
1062 F_VOID_FCT     ctzpad_         ( F_CHAR_T,  F_CHAR_T,  int *,
1063                                  int *,     int *,     char *,
1064                                  char *,    char *,    int * );
1065 F_VOID_FCT     ztzpad_         ( F_CHAR_T,  F_CHAR_T,  int *,
1066                                  int *,     int *,     char *,
1067                                  char *,    char *,    int * );
1068 
1069 F_VOID_FCT     stzpadcpy_      ( F_CHAR_T,  F_CHAR_T,  int *,
1070                                  int *,     int *,     char *,
1071                                  int *,     char *,    int * );
1072 F_VOID_FCT     dtzpadcpy_      ( F_CHAR_T,  F_CHAR_T,  int *,
1073                                  int *,     int *,     char *,
1074                                  int *,     char *,    int * );
1075 F_VOID_FCT     ctzpadcpy_      ( F_CHAR_T,  F_CHAR_T,  int *,
1076                                  int *,     int *,     char *,
1077                                  int *,     char *,    int * );
1078 F_VOID_FCT     ztzpadcpy_      ( F_CHAR_T,  F_CHAR_T,  int *,
1079                                  int *,     int *,     char *,
1080                                  int *,     char *,    int * );
1081 
1082 F_VOID_FCT     stzscal_        ( F_CHAR_T,  int *,     int *,
1083                                  int *,     char *,    char *,
1084                                  int * );
1085 F_VOID_FCT     dtzscal_        ( F_CHAR_T,  int *,     int *,
1086                                  int *,     char *,    char *,
1087                                  int * );
1088 F_VOID_FCT     ctzscal_        ( F_CHAR_T,  int *,     int *,
1089                                  int *,     char *,    char *,
1090                                  int * );
1091 F_VOID_FCT     ztzscal_        ( F_CHAR_T,  int *,     int *,
1092                                  int *,     char *,    char *,
1093                                  int * );
1094 
1095 F_VOID_FCT     chescal_        ( F_CHAR_T,  int *,     int *,
1096                                  int *,     char *,    char *,
1097                                  int * );
1098 F_VOID_FCT     zhescal_        ( F_CHAR_T,  int *,     int *,
1099                                  int *,     char *,    char *,
1100                                  int * );
1101 
1102 F_VOID_FCT     ctzcnjg_        ( F_CHAR_T,  int *,     int *,
1103                                  int *,     char *,    char *,
1104                                  int * );
1105 F_VOID_FCT     ztzcnjg_        ( F_CHAR_T,  int *,     int *,
1106                                  int *,     char *,    char *,
1107                                  int * );
1108 
1109 F_VOID_FCT     sagemv_         ( F_CHAR_T,  int *,     int *,
1110                                  char *,    char *,    int *,
1111                                  char *,    int *,     char *,
1112                                  char *,    int * );
1113 F_VOID_FCT     dagemv_         ( F_CHAR_T,  int *,     int *,
1114                                  char *,    char *,    int *,
1115                                  char *,    int *,     char *,
1116                                  char *,    int * );
1117 F_VOID_FCT     cagemv_         ( F_CHAR_T,  int *,     int *,
1118                                  char *,    char *,    int *,
1119                                  char *,    int *,     char *,
1120                                  char *,    int * );
1121 F_VOID_FCT     zagemv_         ( F_CHAR_T,  int *,     int *,
1122                                  char *,    char *,    int *,
1123                                  char *,    int *,     char *,
1124                                  char *,    int * );
1125 
1126 F_VOID_FCT     sasymv_         ( F_CHAR_T,  int *,     char *,
1127                                  char *,    int *,     char *,
1128                                  int *,     char *,    char *,
1129                                  int * );
1130 F_VOID_FCT     dasymv_         ( F_CHAR_T,  int *,     char *,
1131                                  char *,    int *,     char *,
1132                                  int *,     char *,    char *,
1133                                  int * );
1134 F_VOID_FCT     casymv_         ( F_CHAR_T,  int *,     char *,
1135                                  char *,    int *,     char *,
1136                                  int *,     char *,    char *,
1137                                  int * );
1138 F_VOID_FCT     zasymv_         ( F_CHAR_T,  int *,     char *,
1139                                  char *,    int *,     char *,
1140                                  int *,     char *,    char *,
1141                                  int * );
1142 F_VOID_FCT     cahemv_         ( F_CHAR_T,  int *,     char *,
1143                                  char *,    int *,     char *,
1144                                  int *,     char *,    char *,
1145                                  int * );
1146 F_VOID_FCT     zahemv_         ( F_CHAR_T,  int *,     char *,
1147                                  char *,    int *,     char *,
1148                                  int *,     char *,    char *,
1149                                  int * );
1150 
1151 F_VOID_FCT     satrmv_         ( F_CHAR_T,  F_CHAR_T,  F_CHAR_T,
1152                                  int *,     char *,    char *,
1153                                  int *,     char *,    int *,
1154                                  char *,    char *,    int * );
1155 F_VOID_FCT     datrmv_         ( F_CHAR_T,  F_CHAR_T,  F_CHAR_T,
1156                                  int *,     char *,    char *,
1157                                  int *,     char *,    int *,
1158                                  char *,    char *,    int * );
1159 F_VOID_FCT     catrmv_         ( F_CHAR_T,  F_CHAR_T,  F_CHAR_T,
1160                                  int *,     char *,    char *,
1161                                  int *,     char *,    int *,
1162                                  char *,    char *,    int * );
1163 F_VOID_FCT     zatrmv_         ( F_CHAR_T,  F_CHAR_T,  F_CHAR_T,
1164                                  int *,     char *,    char *,
1165                                  int *,     char *,    int *,
1166                                  char *,    char *,    int * );
1167 
1168 F_VOID_FCT     csymv_          ( F_CHAR_T,  int *,     char *,
1169                                  char *,    int *,     char *,
1170                                  int *,     char *,    char *,
1171                                  int * );
1172 F_VOID_FCT     zsymv_          ( F_CHAR_T,  int *,     char *,
1173                                  char *,    int *,     char *,
1174                                  int *,     char *,    char *,
1175                                  int * );
1176 
1177 F_VOID_FCT     csyr_           ( F_CHAR_T,  int *,     char *,
1178                                  char *,    int *,     char *,
1179                                  int * );
1180 F_VOID_FCT     zsyr_           ( F_CHAR_T,  int *,     char *,
1181                                  char *,    int *,     char *,
1182                                  int * );
1183 
1184 F_VOID_FCT     csyr2_          ( F_CHAR_T,  int *,     char *,
1185                                  char *,    int *,     char *,
1186                                  int *,     char *,    int * );
1187 F_VOID_FCT     zsyr2_          ( F_CHAR_T,  int *,     char *,
1188                                  char *,    int *,     char *,
1189                                  int *,     char *,    int * );
1190 
1191 void           PB_Ctzsyr       ( PBTYP_T *, char *,    int,
1192                                  int,       int,       int,
1193                                  char *,    char *,    int,
1194                                  char *,    int,       char *,
1195                                  int );
1196 void           PB_Ctzher       ( PBTYP_T *, char *,    int,
1197                                  int,       int,       int,
1198                                  char *,    char *,    int,
1199                                  char *,    int,       char *,
1200                                  int );
1201 void           PB_Ctzsyr2      ( PBTYP_T *, char *,    int,
1202                                  int,       int,       int,
1203                                  char *,    char *,    int,
1204                                  char *,    int,       char *,
1205                                  int,       char *,    int,
1206                                  char *,    int );
1207 void           PB_Ctzher2      ( PBTYP_T *, char *,    int,
1208                                  int,       int,       int,
1209                                  char *,    char *,    int,
1210                                  char *,    int,       char *,
1211                                  int,       char *,    int,
1212                                  char *,    int );
1213 void           PB_Ctztrmv      ( PBTYP_T *, char *,    char *,
1214                                  char *,    char *,    int,
1215                                  int,       int,       int,
1216                                  char *,    char *,    int,
1217                                  char *,    int,       char *,
1218                                  int );
1219 void           PB_Ctzatrmv     ( PBTYP_T *, char *,    char *,
1220                                  char *,    char *,    int,
1221                                  int,       int,       int,
1222                                  char *,    char *,    int,
1223                                  char *,    int,       char *,
1224                                  int );
1225 void           PB_Ctzsymv      ( PBTYP_T *, char *,    char *,
1226                                  int,       int,       int,
1227                                  int,       char *,    char *,
1228                                  int,       char *,    int,
1229                                  char *,    int,       char *,
1230                                  int,       char *,    int );
1231 void           PB_Ctzhemv      ( PBTYP_T *, char *,    char *,
1232                                  int,       int,       int,
1233                                  int,       char *,    char *,
1234                                  int,       char *,    int,
1235                                  char *,    int,       char *,
1236                                  int,       char *,    int );
1237 void           PB_Ctzasymv     ( PBTYP_T *, char *,    char *,
1238                                  int,       int,       int,
1239                                  int,       char *,    char *,
1240                                  int,       char *,    int,
1241                                  char *,    int,       char *,
1242                                  int,       char *,    int );
1243 void           PB_Ctzahemv     ( PBTYP_T *, char *,    char *,
1244                                  int,       int,       int,
1245                                  int,       char *,    char *,
1246                                  int,       char *,    int,
1247                                  char *,    int,       char *,
1248                                  int,       char *,    int );
1249 
1250 void           PB_Ctzsyrk      ( PBTYP_T *, char *,    int,
1251                                  int,       int,       int,
1252                                  char *,    char *,    int,
1253                                  char *,    int,       char *,
1254                                  int );
1255 void           PB_Ctzherk      ( PBTYP_T *, char *,    int,
1256                                  int,       int,       int,
1257                                  char *,    char *,    int,
1258                                  char *,    int,       char *,
1259                                  int );
1260 void           PB_Ctzsyr2k     ( PBTYP_T *, char *,    int,
1261                                  int,       int,       int,
1262                                  char *,    char *,    int,
1263                                  char *,    int,       char *,
1264                                  int,       char *,    int,
1265                                  char *,    int );
1266 void           PB_Ctzher2k     ( PBTYP_T *, char *,    int,
1267                                  int,       int,       int,
1268                                  char *,    char *,    int,
1269                                  char *,    int,       char *,
1270                                  int,       char *,    int,
1271                                  char *,    int );
1272 void           PB_Ctztrmm      ( PBTYP_T *, char *,    char *,
1273                                  char *,    char *,    int,
1274                                  int,       int,       int,
1275                                  char *,    char *,    int,
1276                                  char *,    int,       char *,
1277                                  int );
1278 void           PB_Ctzsymm      ( PBTYP_T *, char *,    char *,
1279                                  int,       int,       int,
1280                                  int,       char *,    char *,
1281                                  int,       char *,    int,
1282                                  char *,    int,       char *,
1283                                  int,       char *,    int );
1284 void           PB_Ctzhemm      ( PBTYP_T *, char *,    char *,
1285                                  int,       int,       int,
1286                                  int,       char *,    char *,
1287                                  int,       char *,    int,
1288                                  char *,    int,       char *,
1289                                  int,       char *,    int );
1290 
1291 void           PB_CpswapNN     ( PBTYP_T *, int,       char *,
1292                                  int,       int,       int *,
1293                                  int,       char *,    int,
1294                                  int,       int *,     int );
1295 void           PB_CpswapND     ( PBTYP_T *, int,       char *,
1296                                  int,       int,       int *,
1297                                  int,       char *,    int,
1298                                  int,       int *,     int );
1299 void           PB_Cpdot11      ( PBTYP_T *, int,       char *,
1300                                  char *,    int,       int,
1301                                  int *,     int,       char *,
1302                                  int,       int,       int *,
1303                                  int,       VVDOT_T );
1304 void           PB_CpdotNN      ( PBTYP_T *, int,       char *,
1305                                  char *,    int,       int,
1306                                  int *,     int,       char *,
1307                                  int,       int,       int *,
1308                                  int,       VVDOT_T );
1309 void           PB_CpdotND      ( PBTYP_T *, int,       char *,
1310                                  char *,    int,       int,
1311                                  int *,     int,       char *,
1312                                  int,       int,       int *,
1313                                  int,       VVDOT_T );
1314 void           PB_CpaxpbyNN    ( PBTYP_T *, char *,    int,
1315                                  int,       char *,    char *,
1316                                  int,       int,       int *,
1317                                  char *,    char *,    char *,
1318                                  int,       int,       int *,
1319                                  char * );
1320 void           PB_CpaxpbyND    ( PBTYP_T *, char *,    int,
1321                                  int,       char *,    char *,
1322                                  int,       int,       int *,
1323                                  char *,    char *,    char *,
1324                                  int,       int,       int *,
1325                                  char * );
1326 void           PB_CpaxpbyDN    ( PBTYP_T *, char *,    int,
1327                                  int,       char *,    char *,
1328                                  int,       int,       int *,
1329                                  char *,    char *,    char *,
1330                                  int,       int,       int *,
1331                                  char * );
1332 void           PB_Cpaxpby      ( PBTYP_T *, char *,    int,
1333                                  int,       char *,    char *,
1334                                  int,       int,       int *,
1335                                  char *,    char *,    char *,
1336                                  int,       int,       int *,
1337                                  char * );
1338 
1339 void           PB_Cpsyr        ( PBTYP_T *, char *,    int,
1340                                  int,       char *,    char *,
1341                                  int,       char *,    int,
1342                                  char *,    int,       int,
1343                                  int *,     TZSYR_T );
1344 void           PB_Cpsyr2       ( PBTYP_T *, char *,    int,
1345                                  int,       char *,    char *,
1346                                  int,       char *,    int,
1347                                  char *,    int,       char *,
1348                                  int,       char *,    int,
1349                                  int,       int *,     TZSYR2_T );
1350 void           PB_Cptrm        ( PBTYP_T *, PBTYP_T *, char *,
1351                                  char *,    char *,    char *,
1352                                  int,       int,       char *,
1353                                  char *,    int,       int,
1354                                  int *,     char *,    int,
1355                                  char *,    int,       TZTRM_T );
1356 void           PB_Cpsym        ( PBTYP_T *, PBTYP_T *, char *,
1357                                  char *,    int,       int,
1358                                  char *,    char *,    int,
1359                                  int,       int *,     char *,
1360                                  int,       char *,    int,
1361                                  char *,    int,       char *,
1362                                  int,       TZSYM_T );
1363 void           PB_Cpgeadd      ( PBTYP_T *, char *,    char *,
1364                                  char *,    int,       int,
1365                                  char *,    char *,    int,
1366                                  int,       int *,     char *,
1367                                  char *,    int,       int,
1368                                  int * );
1369 void           PB_Cptradd      ( PBTYP_T *, char *,    char *,
1370                                  char *,    int,       int,
1371                                  char *,    char *,    int,
1372                                  int,       int *,     char *,
1373                                  char *,    int,       int,
1374                                  int * );
1375 void           PB_Cptran       ( PBTYP_T *, char *,    int,
1376                                  int,       char *,    char *,
1377                                  int,       int,       int *,
1378                                  char *,    char *,    int,
1379                                  int,       int * );
1380 void           PB_Cptrsv       ( PBTYP_T *, int,       char *,
1381                                  char *,    char *,    int,
1382                                  char *,    int,       int,
1383                                  int *,     char *,    int,
1384                                  char *,    int );
1385 void           PB_Cptrsm       ( PBTYP_T *, int,       char *,
1386                                  char *,    char *,    char *,
1387                                  int,       int,       char *,
1388                                  char *,    int,       int,
1389                                  int *,     char *,    int,
1390                                  char *,    int );
1391 
1392 void           PB_CpgemmAB     ( PBTYP_T *, char *,    char *,
1393                                  char *,    char *,    int,
1394                                  int,       int,       char *,
1395                                  char *,    int,       int,
1396                                  int *,     char *,    int,
1397                                  int,       int *,     char *,
1398                                  char *,    int,       int,
1399                                  int * );
1400 void           PB_CpgemmAC     ( PBTYP_T *, char *,    char *,
1401                                  char *,    char *,    int,
1402                                  int,       int,       char *,
1403                                  char *,    int,       int,
1404                                  int *,     char *,    int,
1405                                  int,       int *,     char *,
1406                                  char *,    int,       int,
1407                                  int * );
1408 void           PB_CpgemmBC     ( PBTYP_T *, char *,    char *,
1409                                  char *,    char *,    int,
1410                                  int,       int,       char *,
1411                                  char *,    int,       int,
1412                                  int *,     char *,    int,
1413                                  int,       int *,     char *,
1414                                  char *,    int,       int,
1415                                  int * );
1416 void           PB_CpsymmAB     ( PBTYP_T *, char *,    char *,
1417                                  char *,    char *,    int,
1418                                  int,       char *,    char *,
1419                                  int,       int,       int *,
1420                                  char *,    int,       int,
1421                                  int *,     char *,    char *,
1422                                  int,       int,       int * );
1423 void           PB_CpsymmBC     ( PBTYP_T *, char *,    char *,
1424                                  char *,    char *,    int,
1425                                  int,       char *,    char *,
1426                                  int,       int,       int *,
1427                                  char *,    int,       int,
1428                                  int *,     char *,    char *,
1429                                  int,       int,       int * );
1430 void           PB_CpsyrkA      ( PBTYP_T *, char *,    char *,
1431                                  char *,    char *,    int,
1432                                  int,       char *,    char *,
1433                                  int,       int,       int *,
1434                                  char *,    char *,    int,
1435                                  int,       int * );
1436 void           PB_CpsyrkAC     ( PBTYP_T *, char *,    char *,
1437                                  char *,    char *,    int,
1438                                  int,       char *,    char *,
1439                                  int,       int,       int *,
1440                                  char *,    char *,    int,
1441                                  int,       int * );
1442 void           PB_Cpsyr2kA     ( PBTYP_T *, char *,    char *,
1443                                  char *,    char *,    int,
1444                                  int,       char *,    char *,
1445                                  int,       int,       int *,
1446                                  char *,    int,       int,
1447                                  int *,     char *,    char *,
1448                                  int,       int,       int * );
1449 void           PB_Cpsyr2kAC    ( PBTYP_T *, char *,    char *,
1450                                  char *,    char *,    int,
1451                                  int,       char *,    char *,
1452                                  int,       int,       int *,
1453                                  char *,    int,       int,
1454                                  int *,     char *,    char *,
1455                                  int,       int,       int * );
1456 void           PB_CptrmmAB     ( PBTYP_T *, char *,    char *,
1457                                  char *,    char *,    char *,
1458                                  int,       int,       char *,
1459                                  char *,    int,       int,
1460                                  int *,     char *,    int,
1461                                  int,       int * );
1462 void           PB_CptrmmB      ( PBTYP_T *, char *,    char *,
1463                                  char *,    char *,    char *,
1464                                  int,       int,       char *,
1465                                  char *,    int,       int,
1466                                  int *,     char *,    int,
1467                                  int,       int * );
1468 void           PB_CptrsmAB     ( PBTYP_T *, char *,    char *,
1469                                  char *,    char *,    char *,
1470                                  int,       int,       char *,
1471                                  char *,    int,       int,
1472                                  int *,     char *,    int,
1473                                  int,       int * );
1474 void           PB_CptrsmAB0    ( PBTYP_T *, char *,    char *,
1475                                  char *,    int,       int,
1476                                  char *,    char *,    int,
1477                                  int,       int *,     char *,
1478                                  int,       int,       int *,
1479                                  char * *,  int *,     int * );
1480 void           PB_CptrsmAB1    ( PBTYP_T *, char *,    char *,
1481                                  char *,    char *,    int,
1482                                  int,       char *,    char *,
1483                                  int,       int,       int *,
1484                                  char *,    int,       int,
1485                                  int *,     char *,    int * );
1486 void           PB_CptrsmB      ( PBTYP_T *, char *,    char *,
1487                                  char *,    char *,    char *,
1488                                  int,       int,       char *,
1489                                  char *,    int,       int,
1490                                  int *,     char *,    int,
1491                                  int,       int * );
1492 #else
1493 
1494 F_VOID_FCT     immadd_         ();
1495 F_VOID_FCT     smmadd_         ();
1496 F_VOID_FCT     dmmadd_         ();
1497 F_VOID_FCT     cmmadd_         ();
1498 F_VOID_FCT     zmmadd_         ();
1499 
1500 F_VOID_FCT     smmcadd_        ();
1501 F_VOID_FCT     dmmcadd_        ();
1502 F_VOID_FCT     cmmcadd_        ();
1503 F_VOID_FCT     zmmcadd_        ();
1504 
1505 F_VOID_FCT     immtadd_        ();
1506 F_VOID_FCT     smmtadd_        ();
1507 F_VOID_FCT     dmmtadd_        ();
1508 F_VOID_FCT     cmmtadd_        ();
1509 F_VOID_FCT     zmmtadd_        ();
1510 
1511 F_VOID_FCT     smmtcadd_       ();
1512 F_VOID_FCT     dmmtcadd_       ();
1513 F_VOID_FCT     cmmtcadd_       ();
1514 F_VOID_FCT     zmmtcadd_       ();
1515 
1516 F_VOID_FCT     immdda_         ();
1517 F_VOID_FCT     smmdda_         ();
1518 F_VOID_FCT     dmmdda_         ();
1519 F_VOID_FCT     cmmdda_         ();
1520 F_VOID_FCT     zmmdda_         ();
1521 
1522 F_VOID_FCT     smmddac_        ();
1523 F_VOID_FCT     dmmddac_        ();
1524 F_VOID_FCT     cmmddac_        ();
1525 F_VOID_FCT     zmmddac_        ();
1526 
1527 F_VOID_FCT     immddat_        ();
1528 F_VOID_FCT     smmddat_        ();
1529 F_VOID_FCT     dmmddat_        ();
1530 F_VOID_FCT     cmmddat_        ();
1531 F_VOID_FCT     zmmddat_        ();
1532 
1533 F_VOID_FCT     smmddact_       ();
1534 F_VOID_FCT     dmmddact_       ();
1535 F_VOID_FCT     cmmddact_       ();
1536 F_VOID_FCT     zmmddact_       ();
1537 
1538 F_VOID_FCT     sasqrtb_        ();
1539 F_VOID_FCT     dasqrtb_        ();
1540 
1541 F_VOID_FCT     sset_           ();
1542 F_VOID_FCT     dset_           ();
1543 F_VOID_FCT     cset_           ();
1544 F_VOID_FCT     zset_           ();
1545 
1546 F_VOID_FCT     svasum_         ();
1547 F_VOID_FCT     dvasum_         ();
1548 F_VOID_FCT     scvasum_        ();
1549 F_VOID_FCT     dzvasum_        ();
1550 
1551 F_VOID_FCT     sascal_         ();
1552 F_VOID_FCT     dascal_         ();
1553 
1554 F_VOID_FCT     scshft_         ();
1555 F_VOID_FCT     dcshft_         ();
1556 F_VOID_FCT     ccshft_         ();
1557 F_VOID_FCT     zcshft_         ();
1558 
1559 F_VOID_FCT     srshft_         ();
1560 F_VOID_FCT     drshft_         ();
1561 F_VOID_FCT     crshft_         ();
1562 F_VOID_FCT     zrshft_         ();
1563 
1564 F_VOID_FCT     svvdot_         ();
1565 F_VOID_FCT     dvvdot_         ();
1566 F_VOID_FCT     cvvdotc_        ();
1567 F_VOID_FCT     cvvdotu_        ();
1568 F_VOID_FCT     zvvdotc_        ();
1569 F_VOID_FCT     zvvdotu_        ();
1570 
1571 F_VOID_FCT     stzpad_         ();
1572 F_VOID_FCT     dtzpad_         ();
1573 F_VOID_FCT     ctzpad_         ();
1574 F_VOID_FCT     ztzpad_         ();
1575 
1576 F_VOID_FCT     stzpadcpy_      ();
1577 F_VOID_FCT     dtzpadcpy_      ();
1578 F_VOID_FCT     ctzpadcpy_      ();
1579 F_VOID_FCT     ztzpadcpy_      ();
1580 
1581 F_VOID_FCT     stzscal_        ();
1582 F_VOID_FCT     dtzscal_        ();
1583 F_VOID_FCT     ctzscal_        ();
1584 F_VOID_FCT     ztzscal_        ();
1585 
1586 F_VOID_FCT     chescal_        ();
1587 F_VOID_FCT     zhescal_        ();
1588 
1589 F_VOID_FCT     ctzcnjg_        ();
1590 F_VOID_FCT     ztzcnjg_        ();
1591 
1592 F_VOID_FCT     sagemv_         ();
1593 F_VOID_FCT     dagemv_         ();
1594 F_VOID_FCT     cagemv_         ();
1595 F_VOID_FCT     zagemv_         ();
1596 
1597 F_VOID_FCT     sasymv_         ();
1598 F_VOID_FCT     dasymv_         ();
1599 F_VOID_FCT     casymv_         ();
1600 F_VOID_FCT     zasymv_         ();
1601 F_VOID_FCT     cahemv_         ();
1602 F_VOID_FCT     zahemv_         ();
1603 
1604 F_VOID_FCT     satrmv_         ();
1605 F_VOID_FCT     datrmv_         ();
1606 F_VOID_FCT     catrmv_         ();
1607 F_VOID_FCT     zatrmv_         ();
1608 
1609 F_VOID_FCT     csymv_          ();
1610 F_VOID_FCT     zsymv_          ();
1611 
1612 F_VOID_FCT     csyr_           ();
1613 F_VOID_FCT     zsyr_           ();
1614 
1615 F_VOID_FCT     csyr2_          ();
1616 F_VOID_FCT     zsyr2_          ();
1617 
1618 void           PB_Ctzsyr       ();
1619 void           PB_Ctzher       ();
1620 void           PB_Ctzsyr2      ();
1621 void           PB_Ctzher2      ();
1622 void           PB_Ctztrmv      ();
1623 void           PB_Ctzatrmv     ();
1624 void           PB_Ctzsymv      ();
1625 void           PB_Ctzhemv      ();
1626 void           PB_Ctzasymv     ();
1627 void           PB_Ctzahemv     ();
1628 void           PB_Ctzsyrk      ();
1629 void           PB_Ctzherk      ();
1630 void           PB_Ctzsyr2k     ();
1631 void           PB_Ctzher2k     ();
1632 void           PB_Ctztrmm      ();
1633 void           PB_Ctzsymm      ();
1634 void           PB_Ctzhemm      ();
1635 
1636 void           PB_CpswapNN     ();
1637 void           PB_CpswapND     ();
1638 void           PB_Cpdot11      ();
1639 void           PB_CpdotNN      ();
1640 void           PB_CpdotND      ();
1641 void           PB_CpaxpbyNN    ();
1642 void           PB_CpaxpbyND    ();
1643 void           PB_CpaxpbyDN    ();
1644 void           PB_Cpaxpby      ();
1645 
1646 void           PB_Cpsyr        ();
1647 void           PB_Cpsyr2       ();
1648 void           PB_Cptrm        ();
1649 void           PB_Cpsym        ();
1650 void           PB_Cpgeadd      ();
1651 void           PB_Cptradd      ();
1652 void           PB_Cptran       ();
1653 void           PB_Cptrsv       ();
1654 void           PB_Cptrsm       ();
1655 
1656 void           PB_CpgemmAB     ();
1657 void           PB_CpgemmAC     ();
1658 void           PB_CpgemmBC     ();
1659 void           PB_CpsymmAB     ();
1660 void           PB_CpsymmBC     ();
1661 void           PB_CpsyrkA      ();
1662 void           PB_CpsyrkAC     ();
1663 void           PB_Cpsyr2kA     ();
1664 void           PB_Cpsyr2kAC    ();
1665 void           PB_CptrmmAB     ();
1666 void           PB_CptrmmB      ();
1667 void           PB_CptrsmAB     ();
1668 void           PB_CptrsmAB0    ();
1669 void           PB_CptrsmAB1    ();
1670 void           PB_CptrsmB      ();
1671 
1672 #endif
1673                                                              /* TOOLS */
1674 #ifdef __STDC__
1675 
1676 int            PB_Cgcd         ( int,       int );
1677 int            PB_Clcm         ( int,       int );
1678 
1679 void           PB_Cdescset     ( int *,     int,       int,
1680                                  int,       int,       int,
1681                                  int,       int,       int,
1682                                  int,       int );
1683 void           PB_Cdescribe    ( int,       int,       int,
1684                                  int,       int *,     int,
1685                                  int,       int,       int,
1686                                  int *,     int *,     int *,
1687                                  int *,     int *,     int *,
1688                                  int *,     int *,     int *,
1689                                  int * );
1690 void           PB_CargFtoC     ( int,       int,       int *,
1691                                  int *,     int *,     int * );
1692 int            PB_Cfirstnb     ( int,       int,       int,
1693                                  int );
1694 int            PB_Clastnb      ( int,       int,       int,
1695                                  int );
1696 int            PB_Cspan        ( int,       int,       int,
1697                                  int,       int,       int );
1698 
1699 void           PB_Cainfog2l    ( int,       int,       int,
1700                                  int,       int *,     int,
1701                                  int,       int,       int,
1702                                  int *,     int *,     int *,
1703                                  int *,     int *,     int *,
1704                                  int *,     int *,     int *,
1705                                  int * );
1706 void           PB_Cinfog2l     ( int,       int,       int *,
1707                                  int,       int,       int,
1708                                  int,       int *,     int *,
1709                                  int *,     int * );
1710 int            PB_Cg2lrem      ( int,       int,       int,
1711                                  int,       int,       int );
1712 int            PB_Cindxg2p     ( int,       int,       int,
1713                                  int,       int,       int );
1714 int            PB_Cnumroc      ( int,       int,       int,
1715                                  int,       int,       int,
1716                                  int );
1717 int            PB_Cnpreroc     ( int,       int,       int,
1718                                  int,       int,       int,
1719                                  int );
1720 int            PB_Cnnxtroc     ( int,       int,       int,
1721                                  int,       int,       int,
1722                                  int );
1723 
1724 void           PB_Cconjg       ( PBTYP_T *, char *,    char * );
1725 
1726 
1727 void           PB_Cwarn        ( int,       int,       char *,
1728                                  char *,    ... );
1729 void           PB_Cabort       ( int,       char *,    int );
1730 void           PB_Cchkmat      ( int,       char *,    char *,
1731                                  int,       int,       int,
1732                                  int,       int,       int,
1733                                  int *,     int,       int * );
1734 void           PB_Cchkvec      ( int,       char *,    char *,
1735                                  int,       int,       int,
1736                                  int,       int *,     int,
1737                                  int,       int * );
1738 
1739 char *         PB_Cmalloc      ( int );
1740 char *         PB_Cgetbuf      ( char *,    int );
1741 
1742 PBTYP_T *      PB_Citypeset    ( void );
1743 PBTYP_T *      PB_Cstypeset    ( void );
1744 PBTYP_T *      PB_Cdtypeset    ( void );
1745 PBTYP_T *      PB_Cctypeset    ( void );
1746 PBTYP_T *      PB_Cztypeset    ( void );
1747 
1748 int            pilaenv_        ( int *,     F_CHAR_T );
1749 char *         PB_Ctop         ( int *,     char *,    char *,
1750                                  char * );
1751 
1752 void           PB_CVMinit      ( PB_VM_T *, int,       int,
1753                                  int,       int,       int,
1754                                  int,       int,       int,
1755                                  int,       int,       int,
1756                                  int );
1757 int            PB_CVMnpq       ( PB_VM_T * );
1758 void           PB_CVMcontig    ( PB_VM_T *, int *,     int *,
1759                                  int *,     int * );
1760 int            PB_CVMloc       ( PBTYP_T *, PB_VM_T *, char *,
1761                                  char *,    char *,    char *,
1762                                  int,       int,       char *,
1763                                  char *,    int,       char *,
1764                                  char *,    int );
1765 int            PB_CVMswp       ( PBTYP_T *, PB_VM_T *, char *,
1766                                  char *,    char *,    int,
1767                                  char *,    int,       char *,
1768                                  int );
1769 int            PB_CVMpack      ( PBTYP_T *, PB_VM_T *, char *,
1770                                  char *,    char *,    char *,
1771                                  int,       int,       char *,
1772                                  char *,    int,       char *,
1773                                  char *,    int );
1774 void           PB_CVMupdate    ( PB_VM_T *, int,       int *,
1775                                  int * );
1776 
1777 void           PB_Cbinfo       ( int,       int,       int,
1778                                  int,       int,       int,
1779                                  int,       int,       int,
1780                                  int *,     int *,     int *,
1781                                  int *,     int *,     int *,
1782                                  int *,     int *,     int *,
1783                                  int *,     int * );
1784 
1785 void           PB_Cplaprnt     ( PBTYP_T *, int,       int,
1786                                  char *,    int,       int,
1787                                  int *,     int,       int,
1788                                  char * );
1789 void           PB_Cplaprn2     ( PBTYP_T *, int,       int,
1790                                  char *,    int,       int,
1791                                  int *,     int,       int,
1792                                  char *,    int,       int );
1793 void           PB_Cprnt        ( char,      int,       int,
1794                                  int,       char *,    int,
1795                                  int,       char * );
1796 
1797 void           PB_Cplapad      ( PBTYP_T *, char *,    char *,
1798                                  int,       int,       char *,
1799                                  char *,    char *,    int,
1800                                  int,       int * );
1801 void           PB_Cplapd2      ( PBTYP_T *, char *,    char *,
1802                                  int,       int,       char *,
1803                                  char *,    char *,    int,
1804                                  int,       int * );
1805 void           PB_Cplascal     ( PBTYP_T *, char *,    char *,
1806                                  int,       int,       char *,
1807                                  char *,    int,       int,
1808                                  int * );
1809 void           PB_Cplasca2     ( PBTYP_T *, char *,    char *,
1810                                  int,       int,       char *,
1811                                  char *,    int,       int,
1812                                  int * );
1813 void           PB_Cplacnjg     ( PBTYP_T *, int,       int,
1814                                  char *,    char *,    int,
1815                                  int,       int * );
1816 
1817 void           PB_CInV         ( PBTYP_T *, char *,    char *,
1818                                  int,       int,       int *,
1819                                  int,       char *,    int,
1820                                  int,       int *,     char *,
1821                                  char * *,  int *,     int * );
1822 void           PB_CInV2        ( PBTYP_T *, char *,    char *,
1823                                  int,       int,       int *,
1824                                  int,       char *,    int,
1825                                  int,       int *,     char *,
1826                                  char *,    int,       int * );
1827 void           PB_CInOutV      ( PBTYP_T *, char *,    int,
1828                                  int,       int *,     int,
1829                                  char *,    char *,    int,
1830                                  int,       int *,     char *,
1831                                  char * *,  char * *,  int *,
1832                                  int *,     int *,     int * );
1833 void           PB_CInOutV2     ( PBTYP_T *, char *,    char *,
1834                                  int,       int,       int,
1835                                  int *,     int,       char *,
1836                                  int,       int,       int *,
1837                                  char *,    char * *,  int *,
1838                                  int *,     int *,     int * );
1839 void           PB_COutV        ( PBTYP_T *, char *,    char *,
1840                                  int,       int,       int *,
1841                                  int,       char * *,  int *,
1842                                  int *,     int * );
1843 void           PB_CGatherV     ( PBTYP_T *, char *,    char *,
1844                                  int,       int,       char *,
1845                                  int,       int,       int *,
1846                                  char *,    char * *,  int *,
1847                                  int * );
1848 void           PB_CScatterV    ( PBTYP_T *, char *,    int,
1849                                  int,       char *,    int,
1850                                  int,       int *,     char *,
1851                                  char *,    char *,    int,
1852                                  int,       int *,     char * );
1853 #else
1854 
1855 int            PB_Cgcd         ();
1856 int            PB_Clcm         ();
1857 
1858 void           PB_Cdescset     ();
1859 void           PB_Cdescribe    ();
1860 void           PB_CargFtoC     ();
1861 int            PB_Cfirstnb     ();
1862 int            PB_Clastnb      ();
1863 int            PB_Cspan        ();
1864 
1865 void           PB_Cainfog2l    ();
1866 void           PB_Cinfog2l     ();
1867 int            PB_Cg2lrem      ();
1868 int            PB_Cindxg2p     ();
1869 int            PB_Cnumroc      ();
1870 int            PB_Cnpreroc     ();
1871 int            PB_Cnnxtroc     ();
1872 
1873 void           PB_Cconjg       ();
1874 
1875 void           PB_Cwarn        ();
1876 void           PB_Cabort       ();
1877 void           PB_Cchkmat      ();
1878 void           PB_Cchkvec      ();
1879 
1880 char *         PB_Cmalloc      ();
1881 char *         PB_Cgetbuf      ();
1882 
1883 PBTYP_T *      PB_Citypeset    ();
1884 PBTYP_T *      PB_Cstypeset    ();
1885 PBTYP_T *      PB_Cdtypeset    ();
1886 PBTYP_T *      PB_Cctypeset    ();
1887 PBTYP_T *      PB_Cztypeset    ();
1888 
1889 int            pilaenv_        ();
1890 char *         PB_Ctop         ();
1891 
1892 void           PB_CVMinit      ();
1893 int            PB_CVMnpq       ();
1894 void           PB_CVMcontig    ();
1895 int            PB_CVMloc       ();
1896 int            PB_CVMswp       ();
1897 int            PB_CVMpack      ();
1898 void           PB_CVMupdate    ();
1899 
1900 void           PB_Cbinfo       ();
1901 
1902 void           PB_Cplaprnt     ();
1903 void           PB_Cplaprn2     ();
1904 void           PB_Cprnt        ();
1905 
1906 void           PB_Cplapad      ();
1907 void           PB_Cplapd2      ();
1908 void           PB_Cplascal     ();
1909 void           PB_Cplasca2     ();
1910 void           PB_Cplacnjg     ();
1911 
1912 void           PB_CInV         ();
1913 void           PB_CInV2        ();
1914 void           PB_CInOutV      ();
1915 void           PB_CInOutV2     ();
1916 void           PB_COutV        ();
1917 void           PB_CGatherV     ();
1918 void           PB_CScatterV    ();
1919 
1920 #endif
1921