You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

c_dblat3c.c 98 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339
  1. #include <math.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <complex.h>
  6. #ifdef complex
  7. #undef complex
  8. #endif
  9. #ifdef I
  10. #undef I
  11. #endif
  12. #include "common.h"
  13. typedef blasint integer;
  14. typedef unsigned int uinteger;
  15. typedef char *address;
  16. typedef short int shortint;
  17. typedef float real;
  18. typedef double doublereal;
  19. typedef struct { real r, i; } complex;
  20. typedef struct { doublereal r, i; } doublecomplex;
  21. #ifdef _MSC_VER
  22. static inline _Fcomplex Cf(complex *z) {_Fcomplex zz={z->r , z->i}; return zz;}
  23. static inline _Dcomplex Cd(doublecomplex *z) {_Dcomplex zz={z->r , z->i};return zz;}
  24. static inline _Fcomplex * _pCf(complex *z) {return (_Fcomplex*)z;}
  25. static inline _Dcomplex * _pCd(doublecomplex *z) {return (_Dcomplex*)z;}
  26. #else
  27. static inline _Complex float Cf(complex *z) {return z->r + z->i*_Complex_I;}
  28. static inline _Complex double Cd(doublecomplex *z) {return z->r + z->i*_Complex_I;}
  29. static inline _Complex float * _pCf(complex *z) {return (_Complex float*)z;}
  30. static inline _Complex double * _pCd(doublecomplex *z) {return (_Complex double*)z;}
  31. #endif
  32. #define pCf(z) (*_pCf(z))
  33. #define pCd(z) (*_pCd(z))
  34. typedef int logical;
  35. typedef short int shortlogical;
  36. typedef char logical1;
  37. typedef char integer1;
  38. #define TRUE_ (1)
  39. #define FALSE_ (0)
  40. /* Extern is for use with -E */
  41. #ifndef Extern
  42. #define Extern extern
  43. #endif
  44. /* I/O stuff */
  45. typedef int flag;
  46. typedef int ftnlen;
  47. typedef int ftnint;
  48. /*external read, write*/
  49. typedef struct
  50. { flag cierr;
  51. ftnint ciunit;
  52. flag ciend;
  53. char *cifmt;
  54. ftnint cirec;
  55. } cilist;
  56. /*internal read, write*/
  57. typedef struct
  58. { flag icierr;
  59. char *iciunit;
  60. flag iciend;
  61. char *icifmt;
  62. ftnint icirlen;
  63. ftnint icirnum;
  64. } icilist;
  65. /*open*/
  66. typedef struct
  67. { flag oerr;
  68. ftnint ounit;
  69. char *ofnm;
  70. ftnlen ofnmlen;
  71. char *osta;
  72. char *oacc;
  73. char *ofm;
  74. ftnint orl;
  75. char *oblnk;
  76. } olist;
  77. /*close*/
  78. typedef struct
  79. { flag cerr;
  80. ftnint cunit;
  81. char *csta;
  82. } cllist;
  83. /*rewind, backspace, endfile*/
  84. typedef struct
  85. { flag aerr;
  86. ftnint aunit;
  87. } alist;
  88. /* inquire */
  89. typedef struct
  90. { flag inerr;
  91. ftnint inunit;
  92. char *infile;
  93. ftnlen infilen;
  94. ftnint *inex; /*parameters in standard's order*/
  95. ftnint *inopen;
  96. ftnint *innum;
  97. ftnint *innamed;
  98. char *inname;
  99. ftnlen innamlen;
  100. char *inacc;
  101. ftnlen inacclen;
  102. char *inseq;
  103. ftnlen inseqlen;
  104. char *indir;
  105. ftnlen indirlen;
  106. char *infmt;
  107. ftnlen infmtlen;
  108. char *inform;
  109. ftnint informlen;
  110. char *inunf;
  111. ftnlen inunflen;
  112. ftnint *inrecl;
  113. ftnint *innrec;
  114. char *inblank;
  115. ftnlen inblanklen;
  116. } inlist;
  117. #define VOID void
  118. union Multitype { /* for multiple entry points */
  119. integer1 g;
  120. shortint h;
  121. integer i;
  122. /* longint j; */
  123. real r;
  124. doublereal d;
  125. complex c;
  126. doublecomplex z;
  127. };
  128. typedef union Multitype Multitype;
  129. struct Vardesc { /* for Namelist */
  130. char *name;
  131. char *addr;
  132. ftnlen *dims;
  133. int type;
  134. };
  135. typedef struct Vardesc Vardesc;
  136. struct Namelist {
  137. char *name;
  138. Vardesc **vars;
  139. int nvars;
  140. };
  141. typedef struct Namelist Namelist;
  142. #define abs(x) ((x) >= 0 ? (x) : -(x))
  143. #define dabs(x) (fabs(x))
  144. #define f2cmin(a,b) ((a) <= (b) ? (a) : (b))
  145. #define f2cmax(a,b) ((a) >= (b) ? (a) : (b))
  146. #define dmin(a,b) (f2cmin(a,b))
  147. #define dmax(a,b) (f2cmax(a,b))
  148. #define bit_test(a,b) ((a) >> (b) & 1)
  149. #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
  150. #define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
  151. #define abort_() { sig_die("Fortran abort routine called", 1); }
  152. #define c_abs(z) (cabsf(Cf(z)))
  153. #define c_cos(R,Z) { pCf(R)=ccos(Cf(Z)); }
  154. #ifdef _MSC_VER
  155. #define c_div(c, a, b) {Cf(c)._Val[0] = (Cf(a)._Val[0]/Cf(b)._Val[0]); Cf(c)._Val[1]=(Cf(a)._Val[1]/Cf(b)._Val[1]);}
  156. #define z_div(c, a, b) {Cd(c)._Val[0] = (Cd(a)._Val[0]/Cd(b)._Val[0]); Cd(c)._Val[1]=(Cd(a)._Val[1]/Cd(b)._Val[1]);}
  157. #else
  158. #define c_div(c, a, b) {pCf(c) = Cf(a)/Cf(b);}
  159. #define z_div(c, a, b) {pCd(c) = Cd(a)/Cd(b);}
  160. #endif
  161. #define c_exp(R, Z) {pCf(R) = cexpf(Cf(Z));}
  162. #define c_log(R, Z) {pCf(R) = clogf(Cf(Z));}
  163. #define c_sin(R, Z) {pCf(R) = csinf(Cf(Z));}
  164. //#define c_sqrt(R, Z) {*(R) = csqrtf(Cf(Z));}
  165. #define c_sqrt(R, Z) {pCf(R) = csqrtf(Cf(Z));}
  166. #define d_abs(x) (fabs(*(x)))
  167. #define d_acos(x) (acos(*(x)))
  168. #define d_asin(x) (asin(*(x)))
  169. #define d_atan(x) (atan(*(x)))
  170. #define d_atn2(x, y) (atan2(*(x),*(y)))
  171. #define d_cnjg(R, Z) { pCd(R) = conj(Cd(Z)); }
  172. #define r_cnjg(R, Z) { pCf(R) = conjf(Cf(Z)); }
  173. #define d_cos(x) (cos(*(x)))
  174. #define d_cosh(x) (cosh(*(x)))
  175. #define d_dim(__a, __b) ( *(__a) > *(__b) ? *(__a) - *(__b) : 0.0 )
  176. #define d_exp(x) (exp(*(x)))
  177. #define d_imag(z) (cimag(Cd(z)))
  178. #define r_imag(z) (cimagf(Cf(z)))
  179. #define d_int(__x) (*(__x)>0 ? floor(*(__x)) : -floor(- *(__x)))
  180. #define r_int(__x) (*(__x)>0 ? floor(*(__x)) : -floor(- *(__x)))
  181. #define d_lg10(x) ( 0.43429448190325182765 * log(*(x)) )
  182. #define r_lg10(x) ( 0.43429448190325182765 * log(*(x)) )
  183. #define d_log(x) (log(*(x)))
  184. #define d_mod(x, y) (fmod(*(x), *(y)))
  185. #define u_nint(__x) ((__x)>=0 ? floor((__x) + .5) : -floor(.5 - (__x)))
  186. #define d_nint(x) u_nint(*(x))
  187. #define u_sign(__a,__b) ((__b) >= 0 ? ((__a) >= 0 ? (__a) : -(__a)) : -((__a) >= 0 ? (__a) : -(__a)))
  188. #define d_sign(a,b) u_sign(*(a),*(b))
  189. #define r_sign(a,b) u_sign(*(a),*(b))
  190. #define d_sin(x) (sin(*(x)))
  191. #define d_sinh(x) (sinh(*(x)))
  192. #define d_sqrt(x) (sqrt(*(x)))
  193. #define d_tan(x) (tan(*(x)))
  194. #define d_tanh(x) (tanh(*(x)))
  195. #define i_abs(x) abs(*(x))
  196. #define i_dnnt(x) ((integer)u_nint(*(x)))
  197. #define i_len(s, n) (n)
  198. #define i_nint(x) ((integer)u_nint(*(x)))
  199. #define i_sign(a,b) ((integer)u_sign((integer)*(a),(integer)*(b)))
  200. #define pow_dd(ap, bp) ( pow(*(ap), *(bp)))
  201. #define pow_si(B,E) spow_ui(*(B),*(E))
  202. #define pow_ri(B,E) spow_ui(*(B),*(E))
  203. #define pow_di(B,E) dpow_ui(*(B),*(E))
  204. #define pow_zi(p, a, b) {pCd(p) = zpow_ui(Cd(a), *(b));}
  205. #define pow_ci(p, a, b) {pCf(p) = cpow_ui(Cf(a), *(b));}
  206. #define pow_zz(R,A,B) {pCd(R) = cpow(Cd(A),*(B));}
  207. #define s_cat(lpp, rpp, rnp, np, llp) { ftnlen i, nc, ll; char *f__rp, *lp; ll = (llp); lp = (lpp); for(i=0; i < (int)*(np); ++i) { nc = ll; if((rnp)[i] < nc) nc = (rnp)[i]; ll -= nc; f__rp = (rpp)[i]; while(--nc >= 0) *lp++ = *(f__rp)++; } while(--ll >= 0) *lp++ = ' '; }
  208. #define s_cmp(a,b,c,d) ((integer)strncmp((a),(b),f2cmin((c),(d))))
  209. #define s_copy(A,B,C,D) { int __i,__m; for (__i=0, __m=f2cmin((C),(D)); __i<__m && (B)[__i] != 0; ++__i) (A)[__i] = (B)[__i]; }
  210. #define sig_die(s, kill) { exit(1); }
  211. #define s_stop(s, n) {exit(0);}
  212. #define z_abs(z) (cabs(Cd(z)))
  213. #define z_exp(R, Z) {pCd(R) = cexp(Cd(Z));}
  214. #define z_sqrt(R, Z) {pCd(R) = csqrt(Cd(Z));}
  215. #define myexit_() break;
  216. #define mycycle_() continue;
  217. #define myceiling_(w) {ceil(w)}
  218. #define myhuge_(w) {HUGE_VAL}
  219. //#define mymaxloc_(w,s,e,n) {if (sizeof(*(w)) == sizeof(double)) dmaxloc_((w),*(s),*(e),n); else dmaxloc_((w),*(s),*(e),n);}
  220. #define mymaxloc_(w,s,e,n) dmaxloc_(w,*(s),*(e),n)
  221. /* procedure parameter types for -A and -C++ */
  222. #define F2C_proc_par_types 1
  223. /* Common Block Declarations */
  224. struct {
  225. integer infot, noutc;
  226. logical ok;
  227. } infoc_;
  228. #define infoc_1 infoc_
  229. struct {
  230. char srnamt[12];
  231. } srnamc_;
  232. #define srnamc_1 srnamc_
  233. /* Table of constant values */
  234. static integer c__1 = 1;
  235. static integer c__65 = 65;
  236. static doublereal c_b90 = 1.;
  237. static doublereal c_b104 = 0.;
  238. static integer c__6 = 6;
  239. static logical c_true = TRUE_;
  240. static integer c__0 = 0;
  241. static logical c_false = FALSE_;
  242. /* Main program MAIN__() */ int main(void)
  243. {
  244. /* Initialized data */
  245. static char snames[6][13] = {"cblas_dgemm ", "cblas_dsymm ", "cblas_dtrmm ", "cblas_dtrsm ", "cblas_dsyrk ", "cblas_dsyr2k"};
  246. /* System generated locals */
  247. integer i__1, i__2, i__3;
  248. doublereal d__1;
  249. /* Local variables */
  250. static integer nalf, idim[9];
  251. static logical same;
  252. static integer nbet, ntra;
  253. static logical rewi;
  254. extern /* Subroutine */ int dchk1_(char*, doublereal*, doublereal*, integer*, integer*, logical*, logical*, logical*, integer*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, integer*, ftnlen);
  255. extern /* Subroutine */ int dchk2_(char*, doublereal*, doublereal*, integer*, integer*, logical*, logical*, logical*, integer*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, integer*, ftnlen);
  256. extern /* Subroutine */ int dchk3_(char*, doublereal*, doublereal*, integer*, integer*, logical*, logical*, logical*, integer*, integer*, integer*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, integer*, ftnlen);
  257. extern /* Subroutine */ int dchk4_(char*, doublereal*, doublereal*, integer*, integer*, logical*, logical*, logical*, integer*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, doublereal*, integer*, ftnlen);
  258. /* Subroutine */ int dchk5_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nbet, doublereal* bet, integer* nmax, doublereal* ab, doublereal* aa, doublereal* as, doublereal* bb, doublereal* bs, doublereal* c__, doublereal* cc, doublereal* cs, doublereal* ct, doublereal* g, doublereal* w, integer* iorder, ftnlen sname_len);
  259. static doublereal c__[4225] /* was [65][65] */, g[65];
  260. static integer i__, j;
  261. extern doublereal ddiff_(doublereal*, doublereal*);
  262. static integer n;
  263. static logical fatal;
  264. static doublereal w[130];
  265. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  266. static logical trace;
  267. static integer nidim;
  268. static char snaps[32];
  269. static integer isnum;
  270. static logical ltest[6];
  271. static doublereal aa[4225], ab[8450] /* was [65][130] */, bb[4225],
  272. cc[4225], as[4225], bs[4225], cs[4225], ct[65];
  273. static logical sfatal, corder;
  274. static char snamet[12], transa[1], transb[1];
  275. static doublereal thresh;
  276. static logical rorder;
  277. extern /* Subroutine */ void cd3chke_(char*, ftnlen);
  278. static integer layout;
  279. static logical ltestt, tsterr;
  280. static doublereal alf[7];
  281. extern logical lde_(doublereal*, doublereal*, integer*);
  282. static doublereal bet[7], eps, err;
  283. char tmpchar;
  284. /* Test program for the DOUBLE PRECISION Level 3 Blas. */
  285. /* The program must be driven by a short data file. The first 13 records */
  286. /* of the file are read using list-directed input, the last 6 records */
  287. /* are read using the format ( A12, L2 ). An annotated example of a data */
  288. /* file can be obtained by deleting the first 3 characters from the */
  289. /* following 19 lines: */
  290. /* 'DBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE */
  291. /* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) */
  292. /* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. */
  293. /* F LOGICAL FLAG, T TO STOP ON FAILURES. */
  294. /* T LOGICAL FLAG, T TO TEST ERROR EXITS. */
  295. /* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH */
  296. /* 16.0 THRESHOLD VALUE OF TEST RATIO */
  297. /* 6 NUMBER OF VALUES OF N */
  298. /* 0 1 2 3 5 9 VALUES OF N */
  299. /* 3 NUMBER OF VALUES OF ALPHA */
  300. /* 0.0 1.0 0.7 VALUES OF ALPHA */
  301. /* 3 NUMBER OF VALUES OF BETA */
  302. /* 0.0 1.0 1.3 VALUES OF BETA */
  303. /* cblas_dgemm T PUT F FOR NO TEST. SAME COLUMNS. */
  304. /* cblas_dsymm T PUT F FOR NO TEST. SAME COLUMNS. */
  305. /* cblas_dtrmm T PUT F FOR NO TEST. SAME COLUMNS. */
  306. /* cblas_dtrsm T PUT F FOR NO TEST. SAME COLUMNS. */
  307. /* cblas_dsyrk T PUT F FOR NO TEST. SAME COLUMNS. */
  308. /* cblas_dsyr2k T PUT F FOR NO TEST. SAME COLUMNS. */
  309. /* See: */
  310. /* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. */
  311. /* A Set of Level 3 Basic Linear Algebra Subprograms. */
  312. /* Technical Memorandum No.88 (Revision 1), Mathematics and */
  313. /* Computer Science Division, Argonne National Laboratory, 9700 */
  314. /* South Cass Avenue, Argonne, Illinois 60439, US. */
  315. /* -- Written on 8-February-1989. */
  316. /* Jack Dongarra, Argonne National Laboratory. */
  317. /* Iain Duff, AERE Harwell. */
  318. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  319. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  320. /* .. Parameters .. */
  321. /* .. Local Scalars .. */
  322. /* .. Local Arrays .. */
  323. /* .. External Functions .. */
  324. /* .. External Subroutines .. */
  325. /* .. Intrinsic Functions .. */
  326. /* .. Scalars in Common .. */
  327. /* .. Common blocks .. */
  328. /* .. Data statements .. */
  329. /* .. Executable Statements .. */
  330. /* Read name and unit number for summary output file and open file. */
  331. infoc_1.noutc = 6;
  332. /* Read name and unit number for snapshot output file and open file. */
  333. char line[80];
  334. fgets(line,80,stdin);
  335. sscanf(line,"'%s'",snaps);
  336. fgets(line,80,stdin);
  337. #ifdef USE64BITINT
  338. sscanf(line,"%ld",&ntra);
  339. #else
  340. sscanf(line,"%d",&ntra);
  341. #endif
  342. trace = ntra >= 0;
  343. if (trace) {
  344. /* o__1.oerr = 0;
  345. o__1.ounit = ntra;
  346. o__1.ofnmlen = 32;
  347. o__1.ofnm = snaps;
  348. o__1.orl = 0;
  349. o__1.osta = "NEW";
  350. o__1.oacc = 0;
  351. o__1.ofm = 0;
  352. o__1.oblnk = 0;
  353. f_open(&o__1);*/
  354. }
  355. /* Read the flag that directs rewinding of the snapshot file. */
  356. fgets(line,80,stdin);
  357. sscanf(line,"%d",&rewi);
  358. rewi = rewi && trace;
  359. /* Read the flag that directs stopping on any failure. */
  360. fgets(line,80,stdin);
  361. sscanf(line,"%c",&tmpchar);
  362. /* Read the flag that indicates whether error exits are to be tested. */
  363. sfatal=FALSE_;
  364. if (tmpchar=='T')sfatal=TRUE_;
  365. fgets(line,80,stdin);
  366. sscanf(line,"%c",&tmpchar);
  367. /* Read the flag that indicates whether error exits are to be tested. */
  368. tsterr=FALSE_;
  369. if (tmpchar=='T')tsterr=TRUE_;
  370. /* Read the flag that indicates whether row-major data layout to be tested. */
  371. fgets(line,80,stdin);
  372. sscanf(line,"%d",&layout);
  373. /* Read the threshold value of the test ratio */
  374. fgets(line,80,stdin);
  375. sscanf(line,"%lf",&thresh);
  376. /* Read and check the parameter values for the tests. */
  377. /* Values of N */
  378. fgets(line,80,stdin);
  379. #ifdef USE64BITINT
  380. sscanf(line,"%ld",&nidim);
  381. #else
  382. sscanf(line,"%d",&nidim);
  383. #endif
  384. if (nidim < 1 || nidim > 9) {
  385. fprintf(stderr,"NUMBER OF VALUES OF N IS LESS THAN 1 OR GREATER THAN 9");
  386. goto L220;
  387. }
  388. fgets(line,80,stdin);
  389. #ifdef USE64BITINT
  390. sscanf(line,"%ld %ld %ld %ld %ld %ld %ld %ld %ld",&idim[0],&idim[1],&idim[2],
  391. &idim[3],&idim[4],&idim[5],&idim[6],&idim[7],&idim[8]);
  392. #else
  393. sscanf(line,"%d %d %d %d %d %d %d %d %d",&idim[0],&idim[1],&idim[2],
  394. &idim[3],&idim[4],&idim[5],&idim[6],&idim[7],&idim[8]);
  395. #endif
  396. i__1 = nidim;
  397. for (i__ = 1; i__ <= i__1; ++i__) {
  398. if (idim[i__ - 1] < 0 || idim[i__ - 1] > 65) {
  399. fprintf(stderr,"VALUE OF N IS LESS THAN 0 OR GREATER THAN 65\n");
  400. goto L220;
  401. }
  402. /* L10: */
  403. }
  404. /* Values of ALPHA */
  405. fgets(line,80,stdin);
  406. #ifdef USE64BITINT
  407. sscanf(line,"%ld",&nalf);
  408. #else
  409. sscanf(line,"%d",&nalf);
  410. #endif
  411. if (nalf < 1 || nalf > 7) {
  412. fprintf(stderr,"VALUE OF ALPHA IS LESS THAN 0 OR GREATER THAN 7\n");
  413. goto L220;
  414. }
  415. fgets(line,80,stdin);
  416. sscanf(line,"%lf %lf %lf %lf %lf %lf %lf",&alf[0],&alf[1],&alf[2],&alf[3],&alf[4],&alf[5],&alf[6]);
  417. /* Values of BETA */
  418. fgets(line,80,stdin);
  419. #ifdef USE64BITINT
  420. sscanf(line,"%ld",&nbet);
  421. #else
  422. sscanf(line,"%d",&nbet);
  423. #endif
  424. if (nalf < 1 || nbet > 7) {
  425. fprintf(stderr,"VALUE OF BETA IS LESS THAN 0 OR GREATER THAN 7\n");
  426. goto L220;
  427. }
  428. fgets(line,80,stdin);
  429. sscanf(line,"%lf %lf %lf %lf %lf %lf %lf",&bet[0],&bet[1],&bet[2],&bet[3],&bet[4],&bet[5],&bet[6]);
  430. /* Report values of parameters. */
  431. printf("TESTS OF THE DOUBLE PRECISION LEVEL 3 BLAS\nTHE FOLLOWING PARAMETER VALUES WILL BE USED:\n");
  432. printf(" FOR N");
  433. for (i__ =1; i__ <=nidim;++i__) printf(" %d",idim[i__-1]);
  434. printf("\n");
  435. printf(" FOR ALPHA");
  436. for (i__ =1; i__ <=nalf;++i__) printf(" %f",alf[i__-1]);
  437. printf("\n");
  438. printf(" FOR BETA");
  439. for (i__ =1; i__ <=nbet;++i__) printf(" %f",bet[i__-1]);
  440. printf("\n");
  441. if (! tsterr) {
  442. printf(" ERROR-EXITS WILL NOT BE TESTED\n");
  443. }
  444. printf("ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LESS THAN %f\n",thresh);
  445. rorder = FALSE_;
  446. corder = FALSE_;
  447. if (layout == 2) {
  448. rorder = TRUE_;
  449. corder = TRUE_;
  450. printf("COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED\n");
  451. } else if (layout == 1) {
  452. rorder = TRUE_;
  453. printf("ROW-MAJOR DATA LAYOUT IS TESTED\n");
  454. } else if (layout == 0) {
  455. corder = TRUE_;
  456. printf("COLUMN-MAJOR DATA LAYOUT IS TESTED\n");
  457. }
  458. /* Read names of subroutines and flags which indicate */
  459. /* whether they are to be tested. */
  460. for (i__ = 1; i__ <= 6; ++i__) {
  461. ltest[i__ - 1] = FALSE_;
  462. /* L20: */
  463. }
  464. L30:
  465. if (! fgets(line,80,stdin)) {
  466. goto L60;
  467. }
  468. i__1 = sscanf(line,"%12c %c",snamet,&tmpchar);
  469. ltestt=FALSE_;
  470. if (tmpchar=='T')ltestt=TRUE_;
  471. if (i__1 < 2) {
  472. goto L60;
  473. }
  474. for (i__ = 1; i__ <= 6; ++i__) {
  475. if (s_cmp(snamet, snames[i__ - 1] , (ftnlen)12, (ftnlen)12) ==
  476. 0) {
  477. goto L50;
  478. }
  479. /* L40: */
  480. }
  481. printf("SUBPROGRAM NAME %s NOT RECOGNIZED\n****** TESTS ABANDONED ******\n",snamet);
  482. exit(1);
  483. L50:
  484. ltest[i__ - 1] = ltestt;
  485. goto L30;
  486. L60:
  487. /* cl__1.cerr = 0;
  488. cl__1.cunit = 5;
  489. cl__1.csta = 0;
  490. f_clos(&cl__1);*/
  491. /* Compute EPS (the machine precision). */
  492. eps = 1.;
  493. L70:
  494. d__1 = eps + 1.;
  495. if (ddiff_(&d__1, &c_b90) == 0.) {
  496. goto L80;
  497. }
  498. eps *= .5;
  499. goto L70;
  500. L80:
  501. eps += eps;
  502. printf("RELATIVE MACHINE PRECISION IS TAKEN TO BE %9.1g\n",eps);
  503. /* Check the reliability of DMMCH using exact data. */
  504. n = 32;
  505. i__1 = n;
  506. for (j = 1; j <= i__1; ++j) {
  507. i__2 = n;
  508. for (i__ = 1; i__ <= i__2; ++i__) {
  509. /* Computing MAX */
  510. i__3 = i__ - j + 1;
  511. ab[i__ + j * 65 - 66] = (doublereal) f2cmax(i__3,0);
  512. /* L90: */
  513. }
  514. ab[j + 4224] = (doublereal) j;
  515. ab[(j + 65) * 65 - 65] = (doublereal) j;
  516. c__[j - 1] = 0.;
  517. /* L100: */
  518. }
  519. i__1 = n;
  520. for (j = 1; j <= i__1; ++j) {
  521. cc[j - 1] = (doublereal) (j * ((j + 1) * j) / 2 - (j + 1) * j * (j -
  522. 1) / 3);
  523. /* L110: */
  524. }
  525. /* CC holds the exact result. On exit from DMMCH CT holds */
  526. /* the result computed by DMMCH. */
  527. *(unsigned char *)transa = 'N';
  528. *(unsigned char *)transb = 'N';
  529. dmmch_(transa, transb, &n, &c__1, &n, &c_b90, ab, &c__65, &ab[4225], &
  530. c__65, &c_b104, c__, &c__65, ct, g, cc, &c__65, &eps, &err, &
  531. fatal, &c__6, &c_true, (ftnlen)1, (ftnlen)1);
  532. same = lde_(cc, ct, &n);
  533. if (! same || err != 0.) {
  534. printf("ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALUATED WRONGLY\n");
  535. printf("DMMCH WAS CALLED WITH TRANSA = %s AND TRANSB = %s\n", transa,transb);
  536. printf("AND RETURNED SAME = %c AND ERR = %12.3f.\n",(same==FALSE_? 'F':'T'),err);
  537. printf("THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.\n");
  538. printf("****** TESTS ABANDONED ******\n");
  539. exit(1);
  540. }
  541. *(unsigned char *)transb = 'T';
  542. dmmch_(transa, transb, &n, &c__1, &n, &c_b90, ab, &c__65, &ab[4225], &
  543. c__65, &c_b104, c__, &c__65, ct, g, cc, &c__65, &eps, &err, &
  544. fatal, &c__6, &c_true, (ftnlen)1, (ftnlen)1);
  545. same = lde_(cc, ct, &n);
  546. if (! same || err != 0.) {
  547. printf("ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALUATED WRONGLY\n");
  548. printf("DMMCH WAS CALLED WITH TRANSA = %s AND TRANSB = %s\n", transa,transb);
  549. printf("AND RETURNED SAME = %c AND ERR = %12.3f.\n",(same==FALSE_? 'F':'T'),err);
  550. printf("THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.\n");
  551. printf("****** TESTS ABANDONED ******\n");
  552. exit(1);
  553. }
  554. i__1 = n;
  555. for (j = 1; j <= i__1; ++j) {
  556. ab[j + 4224] = (doublereal) (n - j + 1);
  557. ab[(j + 65) * 65 - 65] = (doublereal) (n - j + 1);
  558. /* L120: */
  559. }
  560. i__1 = n;
  561. for (j = 1; j <= i__1; ++j) {
  562. cc[n - j] = (doublereal) (j * ((j + 1) * j) / 2 - (j + 1) * j * (j -
  563. 1) / 3);
  564. /* L130: */
  565. }
  566. *(unsigned char *)transa = 'T';
  567. *(unsigned char *)transb = 'N';
  568. dmmch_(transa, transb, &n, &c__1, &n, &c_b90, ab, &c__65, &ab[4225], &
  569. c__65, &c_b104, c__, &c__65, ct, g, cc, &c__65, &eps, &err, &
  570. fatal, &c__6, &c_true, (ftnlen)1, (ftnlen)1);
  571. same = lde_(cc, ct, &n);
  572. if (! same || err != 0.) {
  573. printf("ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALUATED WRONGLY\n");
  574. printf("DMMCH WAS CALLED WITH TRANSA = %s AND TRANSB = %s\n", transa,transb);
  575. printf("AND RETURNED SAME = %c AND ERR = %12.3f.\n",(same==FALSE_? 'F':'T'),err);
  576. printf("THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.\n");
  577. printf("****** TESTS ABANDONED ******\n");
  578. exit(1);
  579. }
  580. *(unsigned char *)transb = 'T';
  581. dmmch_(transa, transb, &n, &c__1, &n, &c_b90, ab, &c__65, &ab[4225], &
  582. c__65, &c_b104, c__, &c__65, ct, g, cc, &c__65, &eps, &err, &
  583. fatal, &c__6, &c_true, (ftnlen)1, (ftnlen)1);
  584. same = lde_(cc, ct, &n);
  585. if (! same || err != 0.) {
  586. }
  587. /* Test each subroutine in turn. */
  588. for (isnum = 1; isnum <= 6; ++isnum) {
  589. if (! ltest[isnum - 1]) {
  590. /* Subprogram is not to be tested. */
  591. printf("%12s WAS NOT TESTED\n",snames[isnum-1]);
  592. } else {
  593. s_copy(srnamc_1.srnamt, snames[isnum - 1], (ftnlen)12, (
  594. ftnlen)12);
  595. /* Test error exits. */
  596. if (tsterr) {
  597. cd3chke_(snames[isnum - 1], (ftnlen)12);
  598. }
  599. /* Test computations. */
  600. infoc_1.infot = 0;
  601. infoc_1.ok = TRUE_;
  602. fatal = FALSE_;
  603. switch ((int)isnum) {
  604. case 1: goto L140;
  605. case 2: goto L150;
  606. case 3: goto L160;
  607. case 4: goto L160;
  608. case 5: goto L170;
  609. case 6: goto L180;
  610. }
  611. /* Test DGEMM, 01. */
  612. L140:
  613. if (corder) {
  614. dchk1_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  615. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  616. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  617. cc, cs, ct, g, &c__0, (ftnlen)12);
  618. }
  619. if (rorder) {
  620. dchk1_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  621. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  622. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  623. cc, cs, ct, g, &c__1, (ftnlen)12);
  624. }
  625. goto L190;
  626. /* Test DSYMM, 02. */
  627. L150:
  628. if (corder) {
  629. dchk2_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  630. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  631. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  632. cc, cs, ct, g, &c__0, (ftnlen)12);
  633. }
  634. if (rorder) {
  635. dchk2_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  636. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  637. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  638. cc, cs, ct, g, &c__1, (ftnlen)12);
  639. }
  640. goto L190;
  641. /* Test DTRMM, 03, DTRSM, 04. */
  642. L160:
  643. if (corder) {
  644. dchk3_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  645. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  646. c__65, ab, aa, as, &ab[4225], bb, bs, ct, g, c__, &
  647. c__0, (ftnlen)12);
  648. }
  649. if (rorder) {
  650. dchk3_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  651. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  652. c__65, ab, aa, as, &ab[4225], bb, bs, ct, g, c__, &
  653. c__1, (ftnlen)12);
  654. }
  655. goto L190;
  656. /* Test DSYRK, 05. */
  657. L170:
  658. if (corder) {
  659. dchk4_(snames[isnum -1], &eps, &thresh, &c__6, &ntra,
  660. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  661. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  662. cc, cs, ct, g, &c__0, (ftnlen)12);
  663. }
  664. if (rorder) {
  665. dchk4_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  666. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  667. nbet, bet, &c__65, ab, aa, as, &ab[4225], bb, bs, c__,
  668. cc, cs, ct, g, &c__1, (ftnlen)12);
  669. }
  670. goto L190;
  671. /* Test DSYR2K, 06. */
  672. L180:
  673. if (corder) {
  674. dchk5_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  675. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  676. nbet, bet, &c__65, ab, aa, as, bb, bs, c__, cc, cs,
  677. ct, g, w, &c__0, (ftnlen)12);
  678. }
  679. if (rorder) {
  680. dchk5_(snames[isnum - 1], &eps, &thresh, &c__6, &ntra,
  681. &trace, &rewi, &fatal, &nidim, idim, &nalf, alf, &
  682. nbet, bet, &c__65, ab, aa, as, bb, bs, c__, cc, cs,
  683. ct, g, w, &c__1, (ftnlen)12);
  684. }
  685. goto L190;
  686. L190:
  687. if (fatal && sfatal) {
  688. goto L210;
  689. }
  690. }
  691. /* L200: */
  692. }
  693. printf("\nEND OF TESTS\n");
  694. goto L230;
  695. L210:
  696. printf("\n****** FATAL ERROR - TESTS ABANDONED ******\n");
  697. goto L230;
  698. L220:
  699. printf("AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM\n");
  700. printf("****** TESTS ABANDONED ******\n");
  701. L230:
  702. if (trace) {
  703. /* cl__1.cerr = 0;
  704. cl__1.cunit = ntra;
  705. cl__1.csta = 0;
  706. f_clos(&cl__1);*/
  707. }
  708. /* cl__1.cerr = 0;
  709. cl__1.cunit = 6;
  710. cl__1.csta = 0;
  711. f_clos(&cl__1);*/
  712. exit(0);
  713. /* End of DBLAT3. */
  714. } /* MAIN__ */
  715. /* Subroutine */ int dchk1_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nbet, doublereal* bet, integer* nmax, doublereal* a, doublereal* aa, doublereal* as, doublereal* b, doublereal* bb, doublereal* bs, doublereal* c__, doublereal* cc, doublereal* cs, doublereal* ct, doublereal* g, integer* iorder, ftnlen sname_len)
  716. {
  717. /* Initialized data */
  718. static char ich[3+1] = "NTC";
  719. /* System generated locals */
  720. integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
  721. i__3, i__4, i__5, i__6;
  722. /* Local variables */
  723. static doublereal beta;
  724. static integer ldas, ldbs, ldcs;
  725. static logical same, null;
  726. static integer i__, k, m, n;
  727. extern /* Subroutine */ int dmake_(char*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, logical*, doublereal*, ftnlen, ftnlen, ftnlen);
  728. static doublereal alpha;
  729. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  730. static logical isame[13], trana, tranb;
  731. static integer nargs;
  732. static logical reset;
  733. extern /* Subroutine */ void dprcn1_(integer*, integer*, char*, integer*, char*, char*, integer*, integer*, integer*, doublereal*, integer*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen);
  734. static integer ia, ib, ma, mb, na, nb, nc, ik, im, in;
  735. extern /* Subroutine */ void cdgemm_(integer*, char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  736. static integer ks, ms, ns;
  737. extern logical lderes_(char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  738. static char tranas[1], tranbs[1], transa[1], transb[1];
  739. static doublereal errmax;
  740. static integer ica, icb, laa, lbb, lda, lcc, ldb, ldc;
  741. extern logical lde_(doublereal*, doublereal*, integer*);
  742. static doublereal als, bls, err;
  743. /* Tests DGEMM. */
  744. /* Auxiliary routine for test program for Level 3 Blas. */
  745. /* -- Written on 8-February-1989. */
  746. /* Jack Dongarra, Argonne National Laboratory. */
  747. /* Iain Duff, AERE Harwell. */
  748. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  749. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  750. /* .. Parameters .. */
  751. /* .. Scalar Arguments .. */
  752. /* .. Array Arguments .. */
  753. /* .. Local Scalars .. */
  754. /* .. Local Arrays .. */
  755. /* .. External Functions .. */
  756. /* .. External Subroutines .. */
  757. /* .. Intrinsic Functions .. */
  758. /* .. Scalars in Common .. */
  759. /* .. Common blocks .. */
  760. /* .. Data statements .. */
  761. /* Parameter adjustments */
  762. --idim;
  763. --alf;
  764. --bet;
  765. --g;
  766. --ct;
  767. --cs;
  768. --cc;
  769. c_dim1 = *nmax;
  770. c_offset = 1 + c_dim1 * 1;
  771. c__ -= c_offset;
  772. --bs;
  773. --bb;
  774. b_dim1 = *nmax;
  775. b_offset = 1 + b_dim1 * 1;
  776. b -= b_offset;
  777. --as;
  778. --aa;
  779. a_dim1 = *nmax;
  780. a_offset = 1 + a_dim1 * 1;
  781. a -= a_offset;
  782. /* Function Body */
  783. /* .. Executable Statements .. */
  784. nargs = 13;
  785. nc = 0;
  786. reset = TRUE_;
  787. errmax = 0.;
  788. i__1 = *nidim;
  789. for (im = 1; im <= i__1; ++im) {
  790. m = idim[im];
  791. i__2 = *nidim;
  792. for (in = 1; in <= i__2; ++in) {
  793. n = idim[in];
  794. /* Set LDC to 1 more than minimum value if room. */
  795. ldc = m;
  796. if (ldc < *nmax) {
  797. ++ldc;
  798. }
  799. /* Skip tests if not enough room. */
  800. if (ldc > *nmax) {
  801. goto L100;
  802. }
  803. lcc = ldc * n;
  804. null = n <= 0 || m <= 0;
  805. i__3 = *nidim;
  806. for (ik = 1; ik <= i__3; ++ik) {
  807. k = idim[ik];
  808. for (ica = 1; ica <= 3; ++ica) {
  809. *(unsigned char *)transa = *(unsigned char *)&ich[ica - 1]
  810. ;
  811. trana = *(unsigned char *)transa == 'T' || *(unsigned
  812. char *)transa == 'C';
  813. if (trana) {
  814. ma = k;
  815. na = m;
  816. } else {
  817. ma = m;
  818. na = k;
  819. }
  820. /* Set LDA to 1 more than minimum value if room. */
  821. lda = ma;
  822. if (lda < *nmax) {
  823. ++lda;
  824. }
  825. /* Skip tests if not enough room. */
  826. if (lda > *nmax) {
  827. goto L80;
  828. }
  829. laa = lda * na;
  830. /* Generate the matrix A. */
  831. dmake_("GE", " ", " ", &ma, &na, &a[a_offset], nmax, &aa[
  832. 1], &lda, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (
  833. ftnlen)1);
  834. for (icb = 1; icb <= 3; ++icb) {
  835. *(unsigned char *)transb = *(unsigned char *)&ich[icb
  836. - 1];
  837. tranb = *(unsigned char *)transb == 'T' || *(unsigned
  838. char *)transb == 'C';
  839. if (tranb) {
  840. mb = n;
  841. nb = k;
  842. } else {
  843. mb = k;
  844. nb = n;
  845. }
  846. /* Set LDB to 1 more than minimum value if room. */
  847. ldb = mb;
  848. if (ldb < *nmax) {
  849. ++ldb;
  850. }
  851. /* Skip tests if not enough room. */
  852. if (ldb > *nmax) {
  853. goto L70;
  854. }
  855. lbb = ldb * nb;
  856. /* Generate the matrix B. */
  857. dmake_("GE", " ", " ", &mb, &nb, &b[b_offset], nmax, &
  858. bb[1], &ldb, &reset, &c_b104, (ftnlen)2, (
  859. ftnlen)1, (ftnlen)1);
  860. i__4 = *nalf;
  861. for (ia = 1; ia <= i__4; ++ia) {
  862. alpha = alf[ia];
  863. i__5 = *nbet;
  864. for (ib = 1; ib <= i__5; ++ib) {
  865. beta = bet[ib];
  866. /* Generate the matrix C. */
  867. dmake_("GE", " ", " ", &m, &n, &c__[c_offset],
  868. nmax, &cc[1], &ldc, &reset, &c_b104,
  869. (ftnlen)2, (ftnlen)1, (ftnlen)1);
  870. ++nc;
  871. /* Save every datum before calling the */
  872. /* subroutine. */
  873. *(unsigned char *)tranas = *(unsigned char *)
  874. transa;
  875. *(unsigned char *)tranbs = *(unsigned char *)
  876. transb;
  877. ms = m;
  878. ns = n;
  879. ks = k;
  880. als = alpha;
  881. i__6 = laa;
  882. for (i__ = 1; i__ <= i__6; ++i__) {
  883. as[i__] = aa[i__];
  884. /* L10: */
  885. }
  886. ldas = lda;
  887. i__6 = lbb;
  888. for (i__ = 1; i__ <= i__6; ++i__) {
  889. bs[i__] = bb[i__];
  890. /* L20: */
  891. }
  892. ldbs = ldb;
  893. bls = beta;
  894. i__6 = lcc;
  895. for (i__ = 1; i__ <= i__6; ++i__) {
  896. cs[i__] = cc[i__];
  897. /* L30: */
  898. }
  899. ldcs = ldc;
  900. /* Call the subroutine. */
  901. if (*trace) {
  902. dprcn1_(ntra, &nc, sname, iorder, transa,
  903. transb, &m, &n, &k, &alpha, &lda,
  904. &ldb, &beta, &ldc, (ftnlen)12, (
  905. ftnlen)1, (ftnlen)1);
  906. }
  907. if (*rewi) {
  908. /* al__1.aerr = 0;
  909. al__1.aunit = *ntra;
  910. f_rew(&al__1);*/
  911. }
  912. cdgemm_(iorder, transa, transb, &m, &n, &k, &
  913. alpha, &aa[1], &lda, &bb[1], &ldb, &
  914. beta, &cc[1], &ldc, (ftnlen)1, (
  915. ftnlen)1);
  916. /* Check if error-exit was taken incorrectly. */
  917. if (! infoc_1.ok) {
  918. printf(" *** FATAL ERROR - ERROR-CALL MYEXIT TAKEN ON VALID CALL\n");
  919. *fatal = TRUE_;
  920. goto L120;
  921. }
  922. /* See what data changed inside subroutines. */
  923. isame[0] = *(unsigned char *)transa == *(
  924. unsigned char *)tranas;
  925. isame[1] = *(unsigned char *)transb == *(
  926. unsigned char *)tranbs;
  927. isame[2] = ms == m;
  928. isame[3] = ns == n;
  929. isame[4] = ks == k;
  930. isame[5] = als == alpha;
  931. isame[6] = lde_(&as[1], &aa[1], &laa);
  932. isame[7] = ldas == lda;
  933. isame[8] = lde_(&bs[1], &bb[1], &lbb);
  934. isame[9] = ldbs == ldb;
  935. isame[10] = bls == beta;
  936. if (null) {
  937. isame[11] = lde_(&cs[1], &cc[1], &lcc);
  938. } else {
  939. isame[11] = lderes_("GE", " ", &m, &n, &
  940. cs[1], &cc[1], &ldc, (ftnlen)2, (
  941. ftnlen)1);
  942. }
  943. isame[12] = ldcs == ldc;
  944. /* If data was incorrectly changed, report */
  945. /* and return. */
  946. same = TRUE_;
  947. i__6 = nargs;
  948. for (i__ = 1; i__ <= i__6; ++i__) {
  949. same = same && isame[i__ - 1];
  950. if (! isame[i__ - 1]) {
  951. printf(" ******* FATAL ERROR - PARAMETER NUMBER %d WAS CHANGED INCORRECTLY *******\n",i__);
  952. }
  953. /* L40: */
  954. }
  955. if (! same) {
  956. *fatal = TRUE_;
  957. goto L120;
  958. }
  959. if (! null) {
  960. /* Check the result. */
  961. dmmch_(transa, transb, &m, &n, &k, &alpha,
  962. &a[a_offset], nmax, &b[b_offset],
  963. nmax, &beta, &c__[c_offset],
  964. nmax, &ct[1], &g[1], &cc[1], &ldc,
  965. eps, &err, fatal, nout, &c_true,
  966. (ftnlen)1, (ftnlen)1);
  967. errmax = f2cmax(errmax,err);
  968. /* If got really bad answer, report and */
  969. /* return. */
  970. if (*fatal) {
  971. goto L120;
  972. }
  973. }
  974. /* L50: */
  975. }
  976. /* L60: */
  977. }
  978. L70:
  979. ;
  980. }
  981. L80:
  982. ;
  983. }
  984. /* L90: */
  985. }
  986. L100:
  987. ;
  988. }
  989. /* L110: */
  990. }
  991. /* Report result. */
  992. if (errmax < *thresh) {
  993. if (*iorder == 0) {
  994. printf("%s PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  995. }
  996. if (*iorder == 1) {
  997. printf("%s PASSED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  998. }
  999. } else {
  1000. if (*iorder == 0) {
  1001. printf("%s COMPLETED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1002. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1003. }
  1004. if (*iorder == 1) {
  1005. printf("%s COMPLETED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1006. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1007. }
  1008. }
  1009. goto L130;
  1010. L120:
  1011. printf(" ******* %s FAILED ON CALL NUMBER:\n",sname);
  1012. dprcn1_(nout, &nc, sname, iorder, transa, transb, &m, &n, &k, &alpha, &
  1013. lda, &ldb, &beta, &ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1);
  1014. L130:
  1015. return 0;
  1016. /* 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',', */
  1017. /* $ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ', */
  1018. /* $ 'C,', I3, ').' ) */
  1019. /* End of DCHK1. */
  1020. } /* dchk1_ */
  1021. /* Subroutine */ void dprcn1_(integer* nout, integer* nc, char* sname, integer* iorder, char* transa, char* transb, integer* m, integer* n, integer* k, doublereal* alpha, integer* lda, integer* ldb, doublereal* beta, integer* ldc, ftnlen sname_len, ftnlen transa_len, ftnlen transb_len)
  1022. {
  1023. /* Local variables */
  1024. static char crc[14], cta[14], ctb[14];
  1025. if (*(unsigned char *)transa == 'N') {
  1026. s_copy(cta, " CblasNoTrans", (ftnlen)14, (ftnlen)14);
  1027. } else if (*(unsigned char *)transa == 'T') {
  1028. s_copy(cta, " CblasTrans", (ftnlen)14, (ftnlen)14);
  1029. } else {
  1030. s_copy(cta, "CblasConjTrans", (ftnlen)14, (ftnlen)14);
  1031. }
  1032. if (*(unsigned char *)transb == 'N') {
  1033. s_copy(ctb, " CblasNoTrans", (ftnlen)14, (ftnlen)14);
  1034. } else if (*(unsigned char *)transb == 'T') {
  1035. s_copy(ctb, " CblasTrans", (ftnlen)14, (ftnlen)14);
  1036. } else {
  1037. s_copy(ctb, "CblasConjTrans", (ftnlen)14, (ftnlen)14);
  1038. }
  1039. if (*iorder == 1) {
  1040. s_copy(crc, " CblasRowMajor", (ftnlen)14, (ftnlen)14);
  1041. } else {
  1042. s_copy(crc, " CblasColMajor", (ftnlen)14, (ftnlen)14);
  1043. }
  1044. printf("%6d: %s %s %s %s\n",*nc,sname,crc,cta,ctb);
  1045. printf("%d %d %d %4.1f A, %d, B, %d, %4.1f, C, %d.\n",*m,*n,*k,*alpha,*lda,*ldb,*beta,*ldc);
  1046. } /* dprcn1_ */
  1047. /* Subroutine */ int dchk2_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nbet, doublereal* bet, integer* nmax, doublereal* a, doublereal* aa, doublereal* as, doublereal* b, doublereal* bb, doublereal* bs, doublereal* c__, doublereal* cc, doublereal* cs, doublereal* ct, doublereal* g, integer* iorder, ftnlen sname_len)
  1048. {
  1049. /* Initialized data */
  1050. static char ichs[2+1] = "LR";
  1051. static char ichu[2+1] = "UL";
  1052. /* System generated locals */
  1053. integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
  1054. i__3, i__4, i__5;
  1055. /* Local variables */
  1056. static doublereal beta;
  1057. static integer ldas, ldbs, ldcs;
  1058. static logical same;
  1059. static char side[1];
  1060. static logical left, null;
  1061. static char uplo[1];
  1062. static integer i__, m, n;
  1063. extern /* Subroutine */ int dmake_(char*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, logical*, doublereal*, ftnlen, ftnlen, ftnlen);
  1064. static doublereal alpha;
  1065. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  1066. static logical isame[13];
  1067. static char sides[1];
  1068. static integer nargs;
  1069. static logical reset;
  1070. static char uplos[1];
  1071. extern /* Subroutine */ void dprcn2_(integer*, integer*, char*, integer*, char*, char*, integer*, integer*, doublereal*, integer*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen);
  1072. static integer ia, ib, na, nc, im, in, ms, ns;
  1073. extern logical lderes_(char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  1074. extern /* Subroutine */ void cdsymm_(integer*, char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  1075. static doublereal errmax;
  1076. static integer laa, lbb, lda, lcc, ldb, ldc;
  1077. extern logical lde_(doublereal*, doublereal*, integer*);
  1078. static integer ics;
  1079. static doublereal als, bls;
  1080. static integer icu;
  1081. static doublereal err;
  1082. /* Tests DSYMM. */
  1083. /* Auxiliary routine for test program for Level 3 Blas. */
  1084. /* -- Written on 8-February-1989. */
  1085. /* Jack Dongarra, Argonne National Laboratory. */
  1086. /* Iain Duff, AERE Harwell. */
  1087. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  1088. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  1089. /* .. Parameters .. */
  1090. /* .. Scalar Arguments .. */
  1091. /* .. Array Arguments .. */
  1092. /* .. Local Scalars .. */
  1093. /* .. Local Arrays .. */
  1094. /* .. External Functions .. */
  1095. /* .. External Subroutines .. */
  1096. /* .. Intrinsic Functions .. */
  1097. /* .. Scalars in Common .. */
  1098. /* .. Common blocks .. */
  1099. /* .. Data statements .. */
  1100. /* Parameter adjustments */
  1101. --idim;
  1102. --alf;
  1103. --bet;
  1104. --g;
  1105. --ct;
  1106. --cs;
  1107. --cc;
  1108. c_dim1 = *nmax;
  1109. c_offset = 1 + c_dim1 * 1;
  1110. c__ -= c_offset;
  1111. --bs;
  1112. --bb;
  1113. b_dim1 = *nmax;
  1114. b_offset = 1 + b_dim1 * 1;
  1115. b -= b_offset;
  1116. --as;
  1117. --aa;
  1118. a_dim1 = *nmax;
  1119. a_offset = 1 + a_dim1 * 1;
  1120. a -= a_offset;
  1121. /* Function Body */
  1122. /* .. Executable Statements .. */
  1123. nargs = 12;
  1124. nc = 0;
  1125. reset = TRUE_;
  1126. errmax = 0.;
  1127. i__1 = *nidim;
  1128. for (im = 1; im <= i__1; ++im) {
  1129. m = idim[im];
  1130. i__2 = *nidim;
  1131. for (in = 1; in <= i__2; ++in) {
  1132. n = idim[in];
  1133. /* Set LDC to 1 more than minimum value if room. */
  1134. ldc = m;
  1135. if (ldc < *nmax) {
  1136. ++ldc;
  1137. }
  1138. /* Skip tests if not enough room. */
  1139. if (ldc > *nmax) {
  1140. goto L90;
  1141. }
  1142. lcc = ldc * n;
  1143. null = n <= 0 || m <= 0;
  1144. /* Set LDB to 1 more than minimum value if room. */
  1145. ldb = m;
  1146. if (ldb < *nmax) {
  1147. ++ldb;
  1148. }
  1149. /* Skip tests if not enough room. */
  1150. if (ldb > *nmax) {
  1151. goto L90;
  1152. }
  1153. lbb = ldb * n;
  1154. /* Generate the matrix B. */
  1155. dmake_("GE", " ", " ", &m, &n, &b[b_offset], nmax, &bb[1], &ldb, &
  1156. reset, &c_b104, (ftnlen)2, (ftnlen)1, (ftnlen)1);
  1157. for (ics = 1; ics <= 2; ++ics) {
  1158. *(unsigned char *)side = *(unsigned char *)&ichs[ics - 1];
  1159. left = *(unsigned char *)side == 'L';
  1160. if (left) {
  1161. na = m;
  1162. } else {
  1163. na = n;
  1164. }
  1165. /* Set LDA to 1 more than minimum value if room. */
  1166. lda = na;
  1167. if (lda < *nmax) {
  1168. ++lda;
  1169. }
  1170. /* Skip tests if not enough room. */
  1171. if (lda > *nmax) {
  1172. goto L80;
  1173. }
  1174. laa = lda * na;
  1175. for (icu = 1; icu <= 2; ++icu) {
  1176. *(unsigned char *)uplo = *(unsigned char *)&ichu[icu - 1];
  1177. /* Generate the symmetric matrix A. */
  1178. dmake_("SY", uplo, " ", &na, &na, &a[a_offset], nmax, &aa[
  1179. 1], &lda, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (
  1180. ftnlen)1);
  1181. i__3 = *nalf;
  1182. for (ia = 1; ia <= i__3; ++ia) {
  1183. alpha = alf[ia];
  1184. i__4 = *nbet;
  1185. for (ib = 1; ib <= i__4; ++ib) {
  1186. beta = bet[ib];
  1187. /* Generate the matrix C. */
  1188. dmake_("GE", " ", " ", &m, &n, &c__[c_offset],
  1189. nmax, &cc[1], &ldc, &reset, &c_b104, (
  1190. ftnlen)2, (ftnlen)1, (ftnlen)1);
  1191. ++nc;
  1192. /* Save every datum before calling the */
  1193. /* subroutine. */
  1194. *(unsigned char *)sides = *(unsigned char *)side;
  1195. *(unsigned char *)uplos = *(unsigned char *)uplo;
  1196. ms = m;
  1197. ns = n;
  1198. als = alpha;
  1199. i__5 = laa;
  1200. for (i__ = 1; i__ <= i__5; ++i__) {
  1201. as[i__] = aa[i__];
  1202. /* L10: */
  1203. }
  1204. ldas = lda;
  1205. i__5 = lbb;
  1206. for (i__ = 1; i__ <= i__5; ++i__) {
  1207. bs[i__] = bb[i__];
  1208. /* L20: */
  1209. }
  1210. ldbs = ldb;
  1211. bls = beta;
  1212. i__5 = lcc;
  1213. for (i__ = 1; i__ <= i__5; ++i__) {
  1214. cs[i__] = cc[i__];
  1215. /* L30: */
  1216. }
  1217. ldcs = ldc;
  1218. /* Call the subroutine. */
  1219. if (*trace) {
  1220. dprcn2_(ntra, &nc, sname, iorder, side, uplo,
  1221. &m, &n, &alpha, &lda, &ldb, &beta, &
  1222. ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1)
  1223. ;
  1224. }
  1225. if (*rewi) {
  1226. /* al__1.aerr = 0;
  1227. al__1.aunit = *ntra;
  1228. f_rew(&al__1);*/
  1229. }
  1230. cdsymm_(iorder, side, uplo, &m, &n, &alpha, &aa[1]
  1231. , &lda, &bb[1], &ldb, &beta, &cc[1], &ldc,
  1232. (ftnlen)1, (ftnlen)1);
  1233. /* Check if error-exit was taken incorrectly. */
  1234. if (! infoc_1.ok) {
  1235. printf("*** FATAL ERROR - ERROR-CALL MYEXIT TAKEN ON VALID CALL\n");
  1236. *fatal = TRUE_;
  1237. goto L110;
  1238. }
  1239. /* See what data changed inside subroutines. */
  1240. isame[0] = *(unsigned char *)sides == *(unsigned
  1241. char *)side;
  1242. isame[1] = *(unsigned char *)uplos == *(unsigned
  1243. char *)uplo;
  1244. isame[2] = ms == m;
  1245. isame[3] = ns == n;
  1246. isame[4] = als == alpha;
  1247. isame[5] = lde_(&as[1], &aa[1], &laa);
  1248. isame[6] = ldas == lda;
  1249. isame[7] = lde_(&bs[1], &bb[1], &lbb);
  1250. isame[8] = ldbs == ldb;
  1251. isame[9] = bls == beta;
  1252. if (null) {
  1253. isame[10] = lde_(&cs[1], &cc[1], &lcc);
  1254. } else {
  1255. isame[10] = lderes_("GE", " ", &m, &n, &cs[1],
  1256. &cc[1], &ldc, (ftnlen)2, (ftnlen)1);
  1257. }
  1258. isame[11] = ldcs == ldc;
  1259. /* If data was incorrectly changed, report and */
  1260. /* return. */
  1261. same = TRUE_;
  1262. i__5 = nargs;
  1263. for (i__ = 1; i__ <= i__5; ++i__) {
  1264. same = same && isame[i__ - 1];
  1265. if (! isame[i__ - 1]) {
  1266. printf(" ******* FATAL ERROR - PARAMETER NUMBER %d WAS CHANGED INCORRECTLY *******\n",i__);
  1267. }
  1268. /* L40: */
  1269. }
  1270. if (! same) {
  1271. *fatal = TRUE_;
  1272. goto L110;
  1273. }
  1274. if (! null) {
  1275. /* Check the result. */
  1276. if (left) {
  1277. dmmch_("N", "N", &m, &n, &m, &alpha, &a[
  1278. a_offset], nmax, &b[b_offset],
  1279. nmax, &beta, &c__[c_offset], nmax,
  1280. &ct[1], &g[1], &cc[1], &ldc, eps,
  1281. &err, fatal, nout, &c_true, (
  1282. ftnlen)1, (ftnlen)1);
  1283. } else {
  1284. dmmch_("N", "N", &m, &n, &n, &alpha, &b[
  1285. b_offset], nmax, &a[a_offset],
  1286. nmax, &beta, &c__[c_offset], nmax,
  1287. &ct[1], &g[1], &cc[1], &ldc, eps,
  1288. &err, fatal, nout, &c_true, (
  1289. ftnlen)1, (ftnlen)1);
  1290. }
  1291. errmax = f2cmax(errmax,err);
  1292. /* If got really bad answer, report and */
  1293. /* return. */
  1294. if (*fatal) {
  1295. goto L110;
  1296. }
  1297. }
  1298. /* L50: */
  1299. }
  1300. /* L60: */
  1301. }
  1302. /* L70: */
  1303. }
  1304. L80:
  1305. ;
  1306. }
  1307. L90:
  1308. ;
  1309. }
  1310. /* L100: */
  1311. }
  1312. /* Report result. */
  1313. if (errmax < *thresh) {
  1314. if (*iorder == 0) {
  1315. printf("%s PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  1316. }
  1317. if (*iorder == 1) {
  1318. printf("%s PASSED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  1319. }
  1320. } else {
  1321. if (*iorder == 0) {
  1322. printf("%s COMPLETED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1323. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1324. }
  1325. if (*iorder == 1) {
  1326. printf("%s COMPLETED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1327. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1328. }
  1329. }
  1330. goto L120;
  1331. L110:
  1332. printf(" ******* %s FAILED ON CALL NUMBER:\n",sname);
  1333. dprcn2_(nout, &nc, sname, iorder, side, uplo, &m, &n, &alpha, &lda, &ldb,
  1334. &beta, &ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1);
  1335. L120:
  1336. return 0;
  1337. /* 9995 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), */
  1338. /* $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', */
  1339. /* $ ' .' ) */
  1340. /* End of DCHK2. */
  1341. } /* dchk2_ */
  1342. /* Subroutine */ void dprcn2_(integer* nout, integer* nc, char* sname, integer* iorder, char* side, char* uplo, integer* m, integer* n, doublereal* alpha, integer* lda, integer* ldb, doublereal* beta, integer* ldc, ftnlen sname_len, ftnlen side_len, ftnlen uplo_len)
  1343. {
  1344. /* Local variables */
  1345. static char cs[14], cu[14], crc[14];
  1346. if (*(unsigned char *)side == 'L') {
  1347. s_copy(cs, " CblasLeft", (ftnlen)14, (ftnlen)14);
  1348. } else {
  1349. s_copy(cs, " CblasRight", (ftnlen)14, (ftnlen)14);
  1350. }
  1351. if (*(unsigned char *)uplo == 'U') {
  1352. s_copy(cu, " CblasUpper", (ftnlen)14, (ftnlen)14);
  1353. } else {
  1354. s_copy(cu, " CblasLower", (ftnlen)14, (ftnlen)14);
  1355. }
  1356. if (*iorder == 1) {
  1357. s_copy(crc, " CblasRowMajor", (ftnlen)14, (ftnlen)14);
  1358. } else {
  1359. s_copy(crc, " CblasColMajor", (ftnlen)14, (ftnlen)14);
  1360. }
  1361. printf("%6d: %s %s %s %s\n",*nc,sname,crc,cs,cu);
  1362. printf("%d %d %4.1f A, %d, B, %d, %4.1f C, %d.\n",*m,*n,*alpha,*lda,*ldb,*beta,*ldc);
  1363. } /* dprcn2_ */
  1364. /* Subroutine */ int dchk3_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nmax, doublereal* a, doublereal* aa, doublereal* as, doublereal* b, doublereal* bb, doublereal* bs, doublereal* ct, doublereal* g, doublereal* c__, integer* iorder, ftnlen sname_len)
  1365. {
  1366. /* Initialized data */
  1367. static char ichu[2+1] = "UL";
  1368. static char icht[3+1] = "NTC";
  1369. static char ichd[2+1] = "UN";
  1370. static char ichs[2+1] = "LR";
  1371. /* System generated locals */
  1372. integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
  1373. i__3, i__4, i__5;
  1374. /* Local variables */
  1375. static char diag[1];
  1376. static integer ldas, ldbs;
  1377. static logical same;
  1378. static char side[1];
  1379. static logical left, null;
  1380. static char uplo[1];
  1381. static integer i__, j, m, n;
  1382. extern /* Subroutine */ int dmake_(char*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, logical*, doublereal*, ftnlen, ftnlen, ftnlen);
  1383. static doublereal alpha;
  1384. static char diags[1];
  1385. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  1386. static logical isame[13];
  1387. static char sides[1];
  1388. static integer nargs;
  1389. static logical reset;
  1390. static char uplos[1];
  1391. extern /* Subroutine */ void dprcn3_(integer*, integer*, char*, integer*, char*, char*, char*, char*, integer*, integer*, doublereal*, integer*, integer*, ftnlen, ftnlen, ftnlen, ftnlen, ftnlen);
  1392. static integer ia, na, nc, im, in, ms, ns;
  1393. extern logical lderes_(char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  1394. extern /* Subroutine */ void cdtrmm_(integer*, char*, char*, char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen, ftnlen);
  1395. static char tranas[1], transa[1];
  1396. extern /* Subroutine */ void cdtrsm_(integer*, char*, char*, char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen, ftnlen);
  1397. static doublereal errmax;
  1398. static integer laa, icd, lbb, lda, ldb;
  1399. extern logical lde_(doublereal*, doublereal*, integer*);
  1400. static integer ics;
  1401. static doublereal als;
  1402. static integer ict, icu;
  1403. static doublereal err;
  1404. /* Tests DTRMM and DTRSM. */
  1405. /* Auxiliary routine for test program for Level 3 Blas. */
  1406. /* -- Written on 8-February-1989. */
  1407. /* Jack Dongarra, Argonne National Laboratory. */
  1408. /* Iain Duff, AERE Harwell. */
  1409. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  1410. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  1411. /* .. Parameters .. */
  1412. /* .. Scalar Arguments .. */
  1413. /* .. Array Arguments .. */
  1414. /* .. Local Scalars .. */
  1415. /* .. Local Arrays .. */
  1416. /* .. External Functions .. */
  1417. /* .. External Subroutines .. */
  1418. /* .. Intrinsic Functions .. */
  1419. /* .. Scalars in Common .. */
  1420. /* .. Common blocks .. */
  1421. /* .. Data statements .. */
  1422. /* Parameter adjustments */
  1423. --idim;
  1424. --alf;
  1425. c_dim1 = *nmax;
  1426. c_offset = 1 + c_dim1 * 1;
  1427. c__ -= c_offset;
  1428. --g;
  1429. --ct;
  1430. --bs;
  1431. --bb;
  1432. b_dim1 = *nmax;
  1433. b_offset = 1 + b_dim1 * 1;
  1434. b -= b_offset;
  1435. --as;
  1436. --aa;
  1437. a_dim1 = *nmax;
  1438. a_offset = 1 + a_dim1 * 1;
  1439. a -= a_offset;
  1440. /* Function Body */
  1441. /* .. Executable Statements .. */
  1442. nargs = 11;
  1443. nc = 0;
  1444. reset = TRUE_;
  1445. errmax = 0.;
  1446. /* Set up zero matrix for DMMCH. */
  1447. i__1 = *nmax;
  1448. for (j = 1; j <= i__1; ++j) {
  1449. i__2 = *nmax;
  1450. for (i__ = 1; i__ <= i__2; ++i__) {
  1451. c__[i__ + j * c_dim1] = 0.;
  1452. /* L10: */
  1453. }
  1454. /* L20: */
  1455. }
  1456. i__1 = *nidim;
  1457. for (im = 1; im <= i__1; ++im) {
  1458. m = idim[im];
  1459. i__2 = *nidim;
  1460. for (in = 1; in <= i__2; ++in) {
  1461. n = idim[in];
  1462. /* Set LDB to 1 more than minimum value if room. */
  1463. ldb = m;
  1464. if (ldb < *nmax) {
  1465. ++ldb;
  1466. }
  1467. /* Skip tests if not enough room. */
  1468. if (ldb > *nmax) {
  1469. goto L130;
  1470. }
  1471. lbb = ldb * n;
  1472. null = m <= 0 || n <= 0;
  1473. for (ics = 1; ics <= 2; ++ics) {
  1474. *(unsigned char *)side = *(unsigned char *)&ichs[ics - 1];
  1475. left = *(unsigned char *)side == 'L';
  1476. if (left) {
  1477. na = m;
  1478. } else {
  1479. na = n;
  1480. }
  1481. /* Set LDA to 1 more than minimum value if room. */
  1482. lda = na;
  1483. if (lda < *nmax) {
  1484. ++lda;
  1485. }
  1486. /* Skip tests if not enough room. */
  1487. if (lda > *nmax) {
  1488. goto L130;
  1489. }
  1490. laa = lda * na;
  1491. for (icu = 1; icu <= 2; ++icu) {
  1492. *(unsigned char *)uplo = *(unsigned char *)&ichu[icu - 1];
  1493. for (ict = 1; ict <= 3; ++ict) {
  1494. *(unsigned char *)transa = *(unsigned char *)&icht[
  1495. ict - 1];
  1496. for (icd = 1; icd <= 2; ++icd) {
  1497. *(unsigned char *)diag = *(unsigned char *)&ichd[
  1498. icd - 1];
  1499. i__3 = *nalf;
  1500. for (ia = 1; ia <= i__3; ++ia) {
  1501. alpha = alf[ia];
  1502. /* Generate the matrix A. */
  1503. dmake_("TR", uplo, diag, &na, &na, &a[
  1504. a_offset], nmax, &aa[1], &lda, &reset,
  1505. &c_b104, (ftnlen)2, (ftnlen)1, (
  1506. ftnlen)1);
  1507. /* Generate the matrix B. */
  1508. dmake_("GE", " ", " ", &m, &n, &b[b_offset],
  1509. nmax, &bb[1], &ldb, &reset, &c_b104, (
  1510. ftnlen)2, (ftnlen)1, (ftnlen)1);
  1511. ++nc;
  1512. /* Save every datum before calling the */
  1513. /* subroutine. */
  1514. *(unsigned char *)sides = *(unsigned char *)
  1515. side;
  1516. *(unsigned char *)uplos = *(unsigned char *)
  1517. uplo;
  1518. *(unsigned char *)tranas = *(unsigned char *)
  1519. transa;
  1520. *(unsigned char *)diags = *(unsigned char *)
  1521. diag;
  1522. ms = m;
  1523. ns = n;
  1524. als = alpha;
  1525. i__4 = laa;
  1526. for (i__ = 1; i__ <= i__4; ++i__) {
  1527. as[i__] = aa[i__];
  1528. /* L30: */
  1529. }
  1530. ldas = lda;
  1531. i__4 = lbb;
  1532. for (i__ = 1; i__ <= i__4; ++i__) {
  1533. bs[i__] = bb[i__];
  1534. /* L40: */
  1535. }
  1536. ldbs = ldb;
  1537. /* Call the subroutine. */
  1538. if (s_cmp(sname + 9, "mm", (ftnlen)2, (ftnlen)
  1539. 2) == 0) {
  1540. if (*trace) {
  1541. dprcn3_(ntra, &nc, sname, iorder,
  1542. side, uplo, transa, diag, &m,
  1543. &n, &alpha, &lda, &ldb, (
  1544. ftnlen)12, (ftnlen)1, (ftnlen)
  1545. 1, (ftnlen)1, (ftnlen)1);
  1546. }
  1547. if (*rewi) {
  1548. /* al__1.aerr = 0;
  1549. al__1.aunit = *ntra;
  1550. f_rew(&al__1);*/
  1551. }
  1552. cdtrmm_(iorder, side, uplo, transa, diag,
  1553. &m, &n, &alpha, &aa[1], &lda, &bb[
  1554. 1], &ldb, (ftnlen)1, (ftnlen)1, (
  1555. ftnlen)1, (ftnlen)1);
  1556. } else if (s_cmp(sname + 9, "sm", (ftnlen)2, (
  1557. ftnlen)2) == 0) {
  1558. if (*trace) {
  1559. dprcn3_(ntra, &nc, sname, iorder,
  1560. side, uplo, transa, diag, &m,
  1561. &n, &alpha, &lda, &ldb, (
  1562. ftnlen)12, (ftnlen)1, (ftnlen)
  1563. 1, (ftnlen)1, (ftnlen)1);
  1564. }
  1565. if (*rewi) {
  1566. /* al__1.aerr = 0;
  1567. al__1.aunit = *ntra;
  1568. f_rew(&al__1);*/
  1569. }
  1570. cdtrsm_(iorder, side, uplo, transa, diag,
  1571. &m, &n, &alpha, &aa[1], &lda, &bb[
  1572. 1], &ldb, (ftnlen)1, (ftnlen)1, (
  1573. ftnlen)1, (ftnlen)1);
  1574. }
  1575. /* Check if error-exit was taken incorrectly. */
  1576. if (! infoc_1.ok) {
  1577. printf("*** FATAL ERROR - ERROR-CALL MYEXIT TAKEN ON VALID CALL\n");
  1578. *fatal = TRUE_;
  1579. goto L150;
  1580. }
  1581. /* See what data changed inside subroutines. */
  1582. isame[0] = *(unsigned char *)sides == *(
  1583. unsigned char *)side;
  1584. isame[1] = *(unsigned char *)uplos == *(
  1585. unsigned char *)uplo;
  1586. isame[2] = *(unsigned char *)tranas == *(
  1587. unsigned char *)transa;
  1588. isame[3] = *(unsigned char *)diags == *(
  1589. unsigned char *)diag;
  1590. isame[4] = ms == m;
  1591. isame[5] = ns == n;
  1592. isame[6] = als == alpha;
  1593. isame[7] = lde_(&as[1], &aa[1], &laa);
  1594. isame[8] = ldas == lda;
  1595. if (null) {
  1596. isame[9] = lde_(&bs[1], &bb[1], &lbb);
  1597. } else {
  1598. isame[9] = lderes_("GE", " ", &m, &n, &bs[
  1599. 1], &bb[1], &ldb, (ftnlen)2, (
  1600. ftnlen)1);
  1601. }
  1602. isame[10] = ldbs == ldb;
  1603. /* If data was incorrectly changed, report and */
  1604. /* return. */
  1605. same = TRUE_;
  1606. i__4 = nargs;
  1607. for (i__ = 1; i__ <= i__4; ++i__) {
  1608. same = same && isame[i__ - 1];
  1609. if (! isame[i__ - 1]) {
  1610. printf(" ******* FATAL ERROR - PARAMETER NUMBER %d WAS CHANGED INCORRECTLY *******\n",i__);
  1611. }
  1612. /* L50: */
  1613. }
  1614. if (! same) {
  1615. *fatal = TRUE_;
  1616. goto L150;
  1617. }
  1618. if (! null) {
  1619. if (s_cmp(sname + 9, "mm", (ftnlen)2, (
  1620. ftnlen)2) == 0) {
  1621. /* Check the result. */
  1622. if (left) {
  1623. dmmch_(transa, "N", &m, &n, &m, &
  1624. alpha, &a[a_offset], nmax,
  1625. &b[b_offset], nmax, &
  1626. c_b104, &c__[c_offset],
  1627. nmax, &ct[1], &g[1], &bb[
  1628. 1], &ldb, eps, &err,
  1629. fatal, nout, &c_true, (
  1630. ftnlen)1, (ftnlen)1);
  1631. } else {
  1632. dmmch_("N", transa, &m, &n, &n, &
  1633. alpha, &b[b_offset], nmax,
  1634. &a[a_offset], nmax, &
  1635. c_b104, &c__[c_offset],
  1636. nmax, &ct[1], &g[1], &bb[
  1637. 1], &ldb, eps, &err,
  1638. fatal, nout, &c_true, (
  1639. ftnlen)1, (ftnlen)1);
  1640. }
  1641. } else if (s_cmp(sname + 9, "sm", (ftnlen)
  1642. 2, (ftnlen)2) == 0) {
  1643. /* Compute approximation to original */
  1644. /* matrix. */
  1645. i__4 = n;
  1646. for (j = 1; j <= i__4; ++j) {
  1647. i__5 = m;
  1648. for (i__ = 1; i__ <= i__5; ++i__)
  1649. {
  1650. c__[i__ + j * c_dim1] = bb[i__ + (j - 1) * ldb];
  1651. bb[i__ + (j - 1) * ldb] = alpha * b[i__ + j *
  1652. b_dim1];
  1653. /* L60: */
  1654. }
  1655. /* L70: */
  1656. }
  1657. if (left) {
  1658. dmmch_(transa, "N", &m, &n, &m, &
  1659. c_b90, &a[a_offset], nmax,
  1660. &c__[c_offset], nmax, &
  1661. c_b104, &b[b_offset],
  1662. nmax, &ct[1], &g[1], &bb[
  1663. 1], &ldb, eps, &err,
  1664. fatal, nout, &c_false, (
  1665. ftnlen)1, (ftnlen)1);
  1666. } else {
  1667. dmmch_("N", transa, &m, &n, &n, &
  1668. c_b90, &c__[c_offset],
  1669. nmax, &a[a_offset], nmax,
  1670. &c_b104, &b[b_offset],
  1671. nmax, &ct[1], &g[1], &bb[
  1672. 1], &ldb, eps, &err,
  1673. fatal, nout, &c_false, (
  1674. ftnlen)1, (ftnlen)1);
  1675. }
  1676. }
  1677. errmax = f2cmax(errmax,err);
  1678. /* If got really bad answer, report and */
  1679. /* return. */
  1680. if (*fatal) {
  1681. goto L150;
  1682. }
  1683. }
  1684. /* L80: */
  1685. }
  1686. /* L90: */
  1687. }
  1688. /* L100: */
  1689. }
  1690. /* L110: */
  1691. }
  1692. /* L120: */
  1693. }
  1694. L130:
  1695. ;
  1696. }
  1697. /* L140: */
  1698. }
  1699. /* Report result. */
  1700. if (errmax < *thresh) {
  1701. if (*iorder == 0) {
  1702. printf("%s PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  1703. }
  1704. if (*iorder == 1) {
  1705. printf("%s PASSED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  1706. }
  1707. } else {
  1708. if (*iorder == 0) {
  1709. printf("%s COMPLETED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1710. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1711. }
  1712. if (*iorder == 1) {
  1713. printf("%s COMPLETED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  1714. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  1715. }
  1716. }
  1717. goto L160;
  1718. L150:
  1719. printf(" ******* %s FAILED ON CALL NUMBER:\n",sname);
  1720. if (*trace) {
  1721. dprcn3_(ntra, &nc, sname, iorder, side, uplo, transa, diag, &m, &n, &
  1722. alpha, &lda, &ldb, (ftnlen)12, (ftnlen)1, (ftnlen)1, (ftnlen)
  1723. 1, (ftnlen)1);
  1724. }
  1725. L160:
  1726. return 0;
  1727. /* 9995 FORMAT( 1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ), */
  1728. /* $ F4.1, ', A,', I3, ', B,', I3, ') .' ) */
  1729. /* End of DCHK3. */
  1730. } /* dchk3_ */
  1731. /* Subroutine */ void dprcn3_(integer* nout, integer* nc, char* sname, integer* iorder, char* side, char* uplo, char* transa, char* diag, integer* m, integer* n, doublereal* alpha, integer* lda, integer* ldb, ftnlen sname_len, ftnlen side_len, ftnlen uplo_len, ftnlen transa_len, ftnlen diag_len)
  1732. {
  1733. /* Local variables */
  1734. static char ca[14], cd[14], cs[14], cu[14], crc[14];
  1735. if (*(unsigned char *)side == 'L') {
  1736. s_copy(cs, " CblasLeft", (ftnlen)14, (ftnlen)14);
  1737. } else {
  1738. s_copy(cs, " CblasRight", (ftnlen)14, (ftnlen)14);
  1739. }
  1740. if (*(unsigned char *)uplo == 'U') {
  1741. s_copy(cu, " CblasUpper", (ftnlen)14, (ftnlen)14);
  1742. } else {
  1743. s_copy(cu, " CblasLower", (ftnlen)14, (ftnlen)14);
  1744. }
  1745. if (*(unsigned char *)transa == 'N') {
  1746. s_copy(ca, " CblasNoTrans", (ftnlen)14, (ftnlen)14);
  1747. } else if (*(unsigned char *)transa == 'T') {
  1748. s_copy(ca, " CblasTrans", (ftnlen)14, (ftnlen)14);
  1749. } else {
  1750. s_copy(ca, "CblasConjTrans", (ftnlen)14, (ftnlen)14);
  1751. }
  1752. if (*(unsigned char *)diag == 'N') {
  1753. s_copy(cd, " CblasNonUnit", (ftnlen)14, (ftnlen)14);
  1754. } else {
  1755. s_copy(cd, " CblasUnit", (ftnlen)14, (ftnlen)14);
  1756. }
  1757. if (*iorder == 1) {
  1758. s_copy(crc, " CblasRowMajor", (ftnlen)14, (ftnlen)14);
  1759. } else {
  1760. s_copy(crc, " CblasColMajor", (ftnlen)14, (ftnlen)14);
  1761. }
  1762. printf("%6d: %s %s %s %s\n",*nc,sname,crc,cs,cu);
  1763. printf(" %s %s %d %d %4.1f A %d B %d\n",ca,cd,*m,*n,*alpha,*lda,*ldb);
  1764. } /* dprcn3_ */
  1765. /* Subroutine */ int dchk4_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nbet, doublereal* bet, integer* nmax, doublereal* a, doublereal* aa, doublereal* as, doublereal* b, doublereal* bb, doublereal* bs, doublereal* c__, doublereal* cc, doublereal* cs, doublereal* ct, doublereal* g, integer* iorder, ftnlen sname_len)
  1766. {
  1767. /* Initialized data */
  1768. static char icht[3+1] = "NTC";
  1769. static char ichu[2+1] = "UL";
  1770. /* System generated locals */
  1771. integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
  1772. i__3, i__4, i__5;
  1773. /* Local variables */
  1774. static doublereal beta;
  1775. static integer ldas, ldcs;
  1776. static logical same;
  1777. static doublereal bets;
  1778. static logical tran, null;
  1779. static char uplo[1];
  1780. static integer i__, j, k, n;
  1781. extern /* Subroutine */ int dmake_(char*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, logical*, doublereal*, ftnlen, ftnlen, ftnlen);
  1782. static doublereal alpha;
  1783. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  1784. static logical isame[13];
  1785. static integer nargs;
  1786. static logical reset;
  1787. static char trans[1];
  1788. static logical upper;
  1789. static char uplos[1];
  1790. extern /* Subroutine */ void dprcn4_(integer*, integer*, char*, integer*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen);
  1791. static integer ia, ib, jc, ma, na, nc, ik, in, jj, lj, ks, ns;
  1792. extern logical lderes_(char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  1793. static doublereal errmax;
  1794. extern /* Subroutine */ void cdsyrk_(integer*, char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  1795. static char transs[1];
  1796. static integer laa, lda, lcc, ldc;
  1797. extern logical lde_(doublereal*, doublereal*, integer*);
  1798. static doublereal als;
  1799. static integer ict, icu;
  1800. static doublereal err;
  1801. /* Tests DSYRK. */
  1802. /* Auxiliary routine for test program for Level 3 Blas. */
  1803. /* -- Written on 8-February-1989. */
  1804. /* Jack Dongarra, Argonne National Laboratory. */
  1805. /* Iain Duff, AERE Harwell. */
  1806. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  1807. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  1808. /* .. Parameters .. */
  1809. /* .. Scalar Arguments .. */
  1810. /* .. Array Arguments .. */
  1811. /* .. Local Scalars .. */
  1812. /* .. Local Arrays .. */
  1813. /* .. External Functions .. */
  1814. /* .. External Subroutines .. */
  1815. /* .. Intrinsic Functions .. */
  1816. /* .. Scalars in Common .. */
  1817. /* .. Common blocks .. */
  1818. /* .. Data statements .. */
  1819. /* Parameter adjustments */
  1820. --idim;
  1821. --alf;
  1822. --bet;
  1823. --g;
  1824. --ct;
  1825. --cs;
  1826. --cc;
  1827. c_dim1 = *nmax;
  1828. c_offset = 1 + c_dim1 * 1;
  1829. c__ -= c_offset;
  1830. --bs;
  1831. --bb;
  1832. b_dim1 = *nmax;
  1833. b_offset = 1 + b_dim1 * 1;
  1834. b -= b_offset;
  1835. --as;
  1836. --aa;
  1837. a_dim1 = *nmax;
  1838. a_offset = 1 + a_dim1 * 1;
  1839. a -= a_offset;
  1840. /* Function Body */
  1841. /* .. Executable Statements .. */
  1842. nargs = 10;
  1843. nc = 0;
  1844. reset = TRUE_;
  1845. errmax = 0.;
  1846. i__1 = *nidim;
  1847. for (in = 1; in <= i__1; ++in) {
  1848. n = idim[in];
  1849. /* Set LDC to 1 more than minimum value if room. */
  1850. ldc = n;
  1851. if (ldc < *nmax) {
  1852. ++ldc;
  1853. }
  1854. /* Skip tests if not enough room. */
  1855. if (ldc > *nmax) {
  1856. goto L100;
  1857. }
  1858. lcc = ldc * n;
  1859. null = n <= 0;
  1860. i__2 = *nidim;
  1861. for (ik = 1; ik <= i__2; ++ik) {
  1862. k = idim[ik];
  1863. for (ict = 1; ict <= 3; ++ict) {
  1864. *(unsigned char *)trans = *(unsigned char *)&icht[ict - 1];
  1865. tran = *(unsigned char *)trans == 'T' || *(unsigned char *)
  1866. trans == 'C';
  1867. if (tran) {
  1868. ma = k;
  1869. na = n;
  1870. } else {
  1871. ma = n;
  1872. na = k;
  1873. }
  1874. /* Set LDA to 1 more than minimum value if room. */
  1875. lda = ma;
  1876. if (lda < *nmax) {
  1877. ++lda;
  1878. }
  1879. /* Skip tests if not enough room. */
  1880. if (lda > *nmax) {
  1881. goto L80;
  1882. }
  1883. laa = lda * na;
  1884. /* Generate the matrix A. */
  1885. dmake_("GE", " ", " ", &ma, &na, &a[a_offset], nmax, &aa[1], &
  1886. lda, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (ftnlen)1)
  1887. ;
  1888. for (icu = 1; icu <= 2; ++icu) {
  1889. *(unsigned char *)uplo = *(unsigned char *)&ichu[icu - 1];
  1890. upper = *(unsigned char *)uplo == 'U';
  1891. i__3 = *nalf;
  1892. for (ia = 1; ia <= i__3; ++ia) {
  1893. alpha = alf[ia];
  1894. i__4 = *nbet;
  1895. for (ib = 1; ib <= i__4; ++ib) {
  1896. beta = bet[ib];
  1897. /* Generate the matrix C. */
  1898. dmake_("SY", uplo, " ", &n, &n, &c__[c_offset],
  1899. nmax, &cc[1], &ldc, &reset, &c_b104, (
  1900. ftnlen)2, (ftnlen)1, (ftnlen)1);
  1901. ++nc;
  1902. /* Save every datum before calling the subroutine. */
  1903. *(unsigned char *)uplos = *(unsigned char *)uplo;
  1904. *(unsigned char *)transs = *(unsigned char *)
  1905. trans;
  1906. ns = n;
  1907. ks = k;
  1908. als = alpha;
  1909. i__5 = laa;
  1910. for (i__ = 1; i__ <= i__5; ++i__) {
  1911. as[i__] = aa[i__];
  1912. /* L10: */
  1913. }
  1914. ldas = lda;
  1915. bets = beta;
  1916. i__5 = lcc;
  1917. for (i__ = 1; i__ <= i__5; ++i__) {
  1918. cs[i__] = cc[i__];
  1919. /* L20: */
  1920. }
  1921. ldcs = ldc;
  1922. /* Call the subroutine. */
  1923. if (*trace) {
  1924. dprcn4_(ntra, &nc, sname, iorder, uplo, trans,
  1925. &n, &k, &alpha, &lda, &beta, &ldc, (
  1926. ftnlen)12, (ftnlen)1, (ftnlen)1);
  1927. }
  1928. if (*rewi) {
  1929. /* al__1.aerr = 0;
  1930. al__1.aunit = *ntra;
  1931. f_rew(&al__1);*/
  1932. }
  1933. cdsyrk_(iorder, uplo, trans, &n, &k, &alpha, &aa[
  1934. 1], &lda, &beta, &cc[1], &ldc, (ftnlen)1,
  1935. (ftnlen)1);
  1936. /* Check if error-exit was taken incorrectly. */
  1937. if (! infoc_1.ok) {
  1938. printf("*** FATAL ERROR - ERROR-CALL MYEXIT TAKEN ON VALID CALL\n");
  1939. *fatal = TRUE_;
  1940. goto L120;
  1941. }
  1942. /* See what data changed inside subroutines. */
  1943. isame[0] = *(unsigned char *)uplos == *(unsigned
  1944. char *)uplo;
  1945. isame[1] = *(unsigned char *)transs == *(unsigned
  1946. char *)trans;
  1947. isame[2] = ns == n;
  1948. isame[3] = ks == k;
  1949. isame[4] = als == alpha;
  1950. isame[5] = lde_(&as[1], &aa[1], &laa);
  1951. isame[6] = ldas == lda;
  1952. isame[7] = bets == beta;
  1953. if (null) {
  1954. isame[8] = lde_(&cs[1], &cc[1], &lcc);
  1955. } else {
  1956. isame[8] = lderes_("SY", uplo, &n, &n, &cs[1],
  1957. &cc[1], &ldc, (ftnlen)2, (ftnlen)1);
  1958. }
  1959. isame[9] = ldcs == ldc;
  1960. /* If data was incorrectly changed, report and */
  1961. /* return. */
  1962. same = TRUE_;
  1963. i__5 = nargs;
  1964. for (i__ = 1; i__ <= i__5; ++i__) {
  1965. same = same && isame[i__ - 1];
  1966. if (! isame[i__ - 1]) {
  1967. printf(" ******* FATAL ERROR - PARAMETER NUMBER %d WAS CHANGED INCORRECTLY *******\n",i__);
  1968. }
  1969. /* L30: */
  1970. }
  1971. if (! same) {
  1972. *fatal = TRUE_;
  1973. goto L120;
  1974. }
  1975. if (! null) {
  1976. /* Check the result column by column. */
  1977. jc = 1;
  1978. i__5 = n;
  1979. for (j = 1; j <= i__5; ++j) {
  1980. if (upper) {
  1981. jj = 1;
  1982. lj = j;
  1983. } else {
  1984. jj = j;
  1985. lj = n - j + 1;
  1986. }
  1987. if (tran) {
  1988. dmmch_("T", "N", &lj, &c__1, &k, &
  1989. alpha, &a[jj * a_dim1 + 1],
  1990. nmax, &a[j * a_dim1 + 1],
  1991. nmax, &beta, &c__[jj + j *
  1992. c_dim1], nmax, &ct[1], &g[1],
  1993. &cc[jc], &ldc, eps, &err,
  1994. fatal, nout, &c_true, (ftnlen)
  1995. 1, (ftnlen)1);
  1996. } else {
  1997. dmmch_("N", "T", &lj, &c__1, &k, &
  1998. alpha, &a[jj + a_dim1], nmax,
  1999. &a[j + a_dim1], nmax, &beta, &
  2000. c__[jj + j * c_dim1], nmax, &
  2001. ct[1], &g[1], &cc[jc], &ldc,
  2002. eps, &err, fatal, nout, &
  2003. c_true, (ftnlen)1, (ftnlen)1);
  2004. }
  2005. if (upper) {
  2006. jc += ldc;
  2007. } else {
  2008. jc = jc + ldc + 1;
  2009. }
  2010. errmax = f2cmax(errmax,err);
  2011. /* If got really bad answer, report and */
  2012. /* return. */
  2013. if (*fatal) {
  2014. goto L110;
  2015. }
  2016. /* L40: */
  2017. }
  2018. }
  2019. /* L50: */
  2020. }
  2021. /* L60: */
  2022. }
  2023. /* L70: */
  2024. }
  2025. L80:
  2026. ;
  2027. }
  2028. /* L90: */
  2029. }
  2030. L100:
  2031. ;
  2032. }
  2033. /* Report result. */
  2034. if (errmax < *thresh) {
  2035. if (*iorder == 0) {
  2036. printf("%s PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  2037. }
  2038. if (*iorder == 1) {
  2039. printf("%s PASSED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  2040. }
  2041. } else {
  2042. if (*iorder == 0) {
  2043. printf("%s COMPLETED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  2044. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  2045. }
  2046. if (*iorder == 1) {
  2047. printf("%s COMPLETED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  2048. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  2049. }
  2050. }
  2051. goto L130;
  2052. L110:
  2053. if (n > 1) {
  2054. printf(" THESE ARE THE RESULTS FOR COLUMN %d:\n",j);
  2055. }
  2056. L120:
  2057. printf(" ******* %s FAILED ON CALL NUMBER:\n",sname);
  2058. dprcn4_(nout, &nc, sname, iorder, uplo, trans, &n, &k, &alpha, &lda, &
  2059. beta, &ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1);
  2060. L130:
  2061. return 0;
  2062. /* 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), */
  2063. /* $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' ) */
  2064. /* End of DCHK4. */
  2065. } /* dchk4_ */
  2066. /* Subroutine */ void dprcn4_(integer* nout, integer* nc, char* sname, integer* iorder, char* uplo, char* transa, integer* n, integer* k, doublereal* alpha, integer* lda, doublereal* beta, integer* ldc, ftnlen sname_len, ftnlen uplo_len, ftnlen transa_len)
  2067. {
  2068. /* Local variables */
  2069. static char ca[14], cu[14], crc[14];
  2070. if (*(unsigned char *)uplo == 'U') {
  2071. s_copy(cu, " CblasUpper", (ftnlen)14, (ftnlen)14);
  2072. } else {
  2073. s_copy(cu, " CblasLower", (ftnlen)14, (ftnlen)14);
  2074. }
  2075. if (*(unsigned char *)transa == 'N') {
  2076. s_copy(ca, " CblasNoTrans", (ftnlen)14, (ftnlen)14);
  2077. } else if (*(unsigned char *)transa == 'T') {
  2078. s_copy(ca, " CblasTrans", (ftnlen)14, (ftnlen)14);
  2079. } else {
  2080. s_copy(ca, "CblasConjTrans", (ftnlen)14, (ftnlen)14);
  2081. }
  2082. if (*iorder == 1) {
  2083. s_copy(crc, " CblasRowMajor", (ftnlen)14, (ftnlen)14);
  2084. } else {
  2085. s_copy(crc, " CblasColMajor", (ftnlen)14, (ftnlen)14);
  2086. }
  2087. printf("%6d: %s %s %s %s\n",*nc,sname,crc,cu,ca);
  2088. printf("( %d %d %4.1f A %d %4.1f C %d\n",*n,*k,*alpha,*lda,*beta,*ldc);
  2089. } /* dprcn4_ */
  2090. /* Subroutine */ int dchk5_(char* sname, doublereal* eps, doublereal* thresh, integer* nout, integer* ntra, logical* trace, logical* rewi, logical* fatal, integer* nidim, integer* idim, integer* nalf, doublereal* alf, integer* nbet, doublereal* bet, integer* nmax, doublereal* ab, doublereal* aa, doublereal* as, doublereal* bb, doublereal* bs, doublereal* c__, doublereal* cc, doublereal* cs, doublereal* ct, doublereal* g, doublereal* w, integer* iorder, ftnlen sname_len)
  2091. {
  2092. /* Initialized data */
  2093. static char icht[3+1] = "NTC";
  2094. static char ichu[2+1] = "UL";
  2095. /* System generated locals */
  2096. integer c_dim1, c_offset, i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8;
  2097. /* Local variables */
  2098. static integer jjab;
  2099. static doublereal beta;
  2100. static integer ldas, ldbs, ldcs;
  2101. static logical same;
  2102. static doublereal bets;
  2103. static logical tran, null;
  2104. static char uplo[1];
  2105. static integer i__, j, k, n;
  2106. extern /* Subroutine */ int dmake_(char*, char*, char*, integer*, integer*, doublereal*, integer*, doublereal*, integer*, logical*, doublereal*, ftnlen, ftnlen, ftnlen);
  2107. static doublereal alpha;
  2108. extern /* Subroutine */ int dmmch_(char*, char*, integer*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, doublereal*, integer*, doublereal*, doublereal*, logical*, integer*, logical*, ftnlen, ftnlen);
  2109. static logical isame[13];
  2110. static integer nargs;
  2111. static logical reset;
  2112. static char trans[1];
  2113. static logical upper;
  2114. static char uplos[1];
  2115. extern /* Subroutine */ void dprcn5_(integer*, integer*, char*, integer*, char*, char*, integer*, integer*, doublereal*, integer*, integer*, doublereal*, integer*, ftnlen, ftnlen, ftnlen);
  2116. static integer ia, ib, jc, ma, na, nc, ik, in, jj, lj, ks, ns;
  2117. extern logical lderes_(char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  2118. static doublereal errmax;
  2119. static char transs[1];
  2120. static integer laa, lbb, lda, lcc, ldb, ldc;
  2121. extern logical lde_(doublereal*, doublereal*, integer*);
  2122. extern /* Subroutine */ void cdsyr2k_(integer*, char*, char*, integer*, integer*, doublereal*, doublereal*, integer*, doublereal*, integer*, doublereal*, doublereal*, integer*, ftnlen, ftnlen);
  2123. static doublereal als;
  2124. static integer ict, icu;
  2125. static doublereal err;
  2126. /* Tests DSYR2K. */
  2127. /* Auxiliary routine for test program for Level 3 Blas. */
  2128. /* -- Written on 8-February-1989. */
  2129. /* Jack Dongarra, Argonne National Laboratory. */
  2130. /* Iain Duff, AERE Harwell. */
  2131. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2132. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2133. /* .. Parameters .. */
  2134. /* .. Scalar Arguments .. */
  2135. /* .. Array Arguments .. */
  2136. /* .. Local Scalars .. */
  2137. /* .. Local Arrays .. */
  2138. /* .. External Functions .. */
  2139. /* .. External Subroutines .. */
  2140. /* .. Intrinsic Functions .. */
  2141. /* .. Scalars in Common .. */
  2142. /* .. Common blocks .. */
  2143. /* .. Data statements .. */
  2144. /* Parameter adjustments */
  2145. --idim;
  2146. --alf;
  2147. --bet;
  2148. --w;
  2149. --g;
  2150. --ct;
  2151. --cs;
  2152. --cc;
  2153. c_dim1 = *nmax;
  2154. c_offset = 1 + c_dim1 * 1;
  2155. c__ -= c_offset;
  2156. --bs;
  2157. --bb;
  2158. --as;
  2159. --aa;
  2160. --ab;
  2161. /* Function Body */
  2162. /* .. Executable Statements .. */
  2163. nargs = 12;
  2164. nc = 0;
  2165. reset = TRUE_;
  2166. errmax = 0.;
  2167. i__1 = *nidim;
  2168. for (in = 1; in <= i__1; ++in) {
  2169. n = idim[in];
  2170. /* Set LDC to 1 more than minimum value if room. */
  2171. ldc = n;
  2172. if (ldc < *nmax) {
  2173. ++ldc;
  2174. }
  2175. /* Skip tests if not enough room. */
  2176. if (ldc > *nmax) {
  2177. goto L130;
  2178. }
  2179. lcc = ldc * n;
  2180. null = n <= 0;
  2181. i__2 = *nidim;
  2182. for (ik = 1; ik <= i__2; ++ik) {
  2183. k = idim[ik];
  2184. for (ict = 1; ict <= 3; ++ict) {
  2185. *(unsigned char *)trans = *(unsigned char *)&icht[ict - 1];
  2186. tran = *(unsigned char *)trans == 'T' || *(unsigned char *)
  2187. trans == 'C';
  2188. if (tran) {
  2189. ma = k;
  2190. na = n;
  2191. } else {
  2192. ma = n;
  2193. na = k;
  2194. }
  2195. /* Set LDA to 1 more than minimum value if room. */
  2196. lda = ma;
  2197. if (lda < *nmax) {
  2198. ++lda;
  2199. }
  2200. /* Skip tests if not enough room. */
  2201. if (lda > *nmax) {
  2202. goto L110;
  2203. }
  2204. laa = lda * na;
  2205. /* Generate the matrix A. */
  2206. if (tran) {
  2207. i__3 = *nmax << 1;
  2208. dmake_("GE", " ", " ", &ma, &na, &ab[1], &i__3, &aa[1], &
  2209. lda, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (
  2210. ftnlen)1);
  2211. } else {
  2212. dmake_("GE", " ", " ", &ma, &na, &ab[1], nmax, &aa[1], &
  2213. lda, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (
  2214. ftnlen)1);
  2215. }
  2216. /* Generate the matrix B. */
  2217. ldb = lda;
  2218. lbb = laa;
  2219. if (tran) {
  2220. i__3 = *nmax << 1;
  2221. dmake_("GE", " ", " ", &ma, &na, &ab[k + 1], &i__3, &bb[1]
  2222. , &ldb, &reset, &c_b104, (ftnlen)2, (ftnlen)1, (
  2223. ftnlen)1);
  2224. } else {
  2225. dmake_("GE", " ", " ", &ma, &na, &ab[k * *nmax + 1], nmax,
  2226. &bb[1], &ldb, &reset, &c_b104, (ftnlen)2, (
  2227. ftnlen)1, (ftnlen)1);
  2228. }
  2229. for (icu = 1; icu <= 2; ++icu) {
  2230. *(unsigned char *)uplo = *(unsigned char *)&ichu[icu - 1];
  2231. upper = *(unsigned char *)uplo == 'U';
  2232. i__3 = *nalf;
  2233. for (ia = 1; ia <= i__3; ++ia) {
  2234. alpha = alf[ia];
  2235. i__4 = *nbet;
  2236. for (ib = 1; ib <= i__4; ++ib) {
  2237. beta = bet[ib];
  2238. /* Generate the matrix C. */
  2239. dmake_("SY", uplo, " ", &n, &n, &c__[c_offset],
  2240. nmax, &cc[1], &ldc, &reset, &c_b104, (
  2241. ftnlen)2, (ftnlen)1, (ftnlen)1);
  2242. ++nc;
  2243. /* Save every datum before calling the subroutine. */
  2244. *(unsigned char *)uplos = *(unsigned char *)uplo;
  2245. *(unsigned char *)transs = *(unsigned char *)
  2246. trans;
  2247. ns = n;
  2248. ks = k;
  2249. als = alpha;
  2250. i__5 = laa;
  2251. for (i__ = 1; i__ <= i__5; ++i__) {
  2252. as[i__] = aa[i__];
  2253. /* L10: */
  2254. }
  2255. ldas = lda;
  2256. i__5 = lbb;
  2257. for (i__ = 1; i__ <= i__5; ++i__) {
  2258. bs[i__] = bb[i__];
  2259. /* L20: */
  2260. }
  2261. ldbs = ldb;
  2262. bets = beta;
  2263. i__5 = lcc;
  2264. for (i__ = 1; i__ <= i__5; ++i__) {
  2265. cs[i__] = cc[i__];
  2266. /* L30: */
  2267. }
  2268. ldcs = ldc;
  2269. /* Call the subroutine. */
  2270. if (*trace) {
  2271. dprcn5_(ntra, &nc, sname, iorder, uplo, trans,
  2272. &n, &k, &alpha, &lda, &ldb, &beta, &
  2273. ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1)
  2274. ;
  2275. }
  2276. if (*rewi) {
  2277. /* al__1.aerr = 0;
  2278. al__1.aunit = *ntra;
  2279. f_rew(&al__1);*/
  2280. }
  2281. cdsyr2k_(iorder, uplo, trans, &n, &k, &alpha, &aa[
  2282. 1], &lda, &bb[1], &ldb, &beta, &cc[1], &
  2283. ldc, (ftnlen)1, (ftnlen)1);
  2284. /* Check if error-exit was taken incorrectly. */
  2285. if (! infoc_1.ok) {
  2286. printf("*** FATAL ERROR - ERROR-CALL MYEXIT TAKEN ON VALID CALL\n");
  2287. *fatal = TRUE_;
  2288. goto L150;
  2289. }
  2290. /* See what data changed inside subroutines. */
  2291. isame[0] = *(unsigned char *)uplos == *(unsigned
  2292. char *)uplo;
  2293. isame[1] = *(unsigned char *)transs == *(unsigned
  2294. char *)trans;
  2295. isame[2] = ns == n;
  2296. isame[3] = ks == k;
  2297. isame[4] = als == alpha;
  2298. isame[5] = lde_(&as[1], &aa[1], &laa);
  2299. isame[6] = ldas == lda;
  2300. isame[7] = lde_(&bs[1], &bb[1], &lbb);
  2301. isame[8] = ldbs == ldb;
  2302. isame[9] = bets == beta;
  2303. if (null) {
  2304. isame[10] = lde_(&cs[1], &cc[1], &lcc);
  2305. } else {
  2306. isame[10] = lderes_("SY", uplo, &n, &n, &cs[1]
  2307. , &cc[1], &ldc, (ftnlen)2, (ftnlen)1);
  2308. }
  2309. isame[11] = ldcs == ldc;
  2310. /* If data was incorrectly changed, report and */
  2311. /* return. */
  2312. same = TRUE_;
  2313. i__5 = nargs;
  2314. for (i__ = 1; i__ <= i__5; ++i__) {
  2315. same = same && isame[i__ - 1];
  2316. if (! isame[i__ - 1]) {
  2317. printf(" ******* FATAL ERROR - PARAMETER NUMBER %d WAS CHANGED INCORRECTLY *******\n",i__);
  2318. }
  2319. /* L40: */
  2320. }
  2321. if (! same) {
  2322. *fatal = TRUE_;
  2323. goto L150;
  2324. }
  2325. if (! null) {
  2326. /* Check the result column by column. */
  2327. jjab = 1;
  2328. jc = 1;
  2329. i__5 = n;
  2330. for (j = 1; j <= i__5; ++j) {
  2331. if (upper) {
  2332. jj = 1;
  2333. lj = j;
  2334. } else {
  2335. jj = j;
  2336. lj = n - j + 1;
  2337. }
  2338. if (tran) {
  2339. i__6 = k;
  2340. for (i__ = 1; i__ <= i__6; ++i__) {
  2341. w[i__] = ab[((j - 1) << 1) * *nmax
  2342. + k + i__];
  2343. w[k + i__] = ab[((j - 1) << 1) * *
  2344. nmax + i__];
  2345. /* L50: */
  2346. }
  2347. i__6 = k << 1;
  2348. i__7 = *nmax << 1;
  2349. i__8 = *nmax << 1;
  2350. dmmch_("T", "N", &lj, &c__1, &i__6, &
  2351. alpha, &ab[jjab], &i__7, &w[1]
  2352. , &i__8, &beta, &c__[jj + j *
  2353. c_dim1], nmax, &ct[1], &g[1],
  2354. &cc[jc], &ldc, eps, &err,
  2355. fatal, nout, &c_true, (ftnlen)
  2356. 1, (ftnlen)1);
  2357. } else {
  2358. i__6 = k;
  2359. for (i__ = 1; i__ <= i__6; ++i__) {
  2360. w[i__] = ab[(k + i__ - 1) * *nmax
  2361. + j];
  2362. w[k + i__] = ab[(i__ - 1) * *nmax
  2363. + j];
  2364. /* L60: */
  2365. }
  2366. i__6 = k << 1;
  2367. i__7 = *nmax << 1;
  2368. dmmch_("N", "N", &lj, &c__1, &i__6, &
  2369. alpha, &ab[jj], nmax, &w[1], &
  2370. i__7, &beta, &c__[jj + j *
  2371. c_dim1], nmax, &ct[1], &g[1],
  2372. &cc[jc], &ldc, eps, &err,
  2373. fatal, nout, &c_true, (ftnlen)
  2374. 1, (ftnlen)1);
  2375. }
  2376. if (upper) {
  2377. jc += ldc;
  2378. } else {
  2379. jc = jc + ldc + 1;
  2380. if (tran) {
  2381. jjab += *nmax << 1;
  2382. }
  2383. }
  2384. errmax = f2cmax(errmax,err);
  2385. /* If got really bad answer, report and */
  2386. /* return. */
  2387. if (*fatal) {
  2388. goto L140;
  2389. }
  2390. /* L70: */
  2391. }
  2392. }
  2393. /* L80: */
  2394. }
  2395. /* L90: */
  2396. }
  2397. /* L100: */
  2398. }
  2399. L110:
  2400. ;
  2401. }
  2402. /* L120: */
  2403. }
  2404. L130:
  2405. ;
  2406. }
  2407. /* Report result. */
  2408. if (errmax < *thresh) {
  2409. if (*iorder == 0) {
  2410. printf("%s PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  2411. }
  2412. if (*iorder == 1) {
  2413. printf("%s PASSED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)\n",sname,nc);
  2414. }
  2415. } else {
  2416. if (*iorder == 0) {
  2417. printf("%s COMPLETED THE COLUMN-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  2418. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  2419. }
  2420. if (*iorder == 1) {
  2421. printf("%s COMPLETED THE ROW-MAJOR COMPUTATIONAL TESTS (%d CALLS)/n",sname,nc);
  2422. printf("***** BUT WITH MAXIMUM TEST RATIO %8.2f - SUSPECT *******/n",errmax);
  2423. }
  2424. }
  2425. goto L160;
  2426. L140:
  2427. if (n > 1) {
  2428. printf(" THESE ARE THE RESULTS FOR COLUMN %d:\n",j);
  2429. }
  2430. L150:
  2431. printf(" ******* %s FAILED ON CALL NUMBER:\n",sname);
  2432. dprcn5_(nout, &nc, sname, iorder, uplo, trans, &n, &k, &alpha, &lda, &ldb,
  2433. &beta, &ldc, (ftnlen)12, (ftnlen)1, (ftnlen)1);
  2434. L160:
  2435. return 0;
  2436. /* 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), */
  2437. /* $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', */
  2438. /* $ ' .' ) */
  2439. /* End of DCHK5. */
  2440. } /* dchk5_ */
  2441. /* Subroutine */ void dprcn5_(integer* nout, integer* nc, char* sname, integer* iorder, char* uplo, char* transa, integer* n, integer* k, doublereal* alpha, integer* lda, integer* ldb, doublereal* beta, integer* ldc, ftnlen sname_len, ftnlen uplo_len, ftnlen transa_len)
  2442. {
  2443. /* Local variables */
  2444. static char ca[14], cu[14], crc[14];
  2445. if (*(unsigned char *)uplo == 'U') {
  2446. s_copy(cu, " CblasUpper", (ftnlen)14, (ftnlen)14);
  2447. } else {
  2448. s_copy(cu, " CblasLower", (ftnlen)14, (ftnlen)14);
  2449. }
  2450. if (*(unsigned char *)transa == 'N') {
  2451. s_copy(ca, " CblasNoTrans", (ftnlen)14, (ftnlen)14);
  2452. } else if (*(unsigned char *)transa == 'T') {
  2453. s_copy(ca, " CblasTrans", (ftnlen)14, (ftnlen)14);
  2454. } else {
  2455. s_copy(ca, "CblasConjTrans", (ftnlen)14, (ftnlen)14);
  2456. }
  2457. if (*iorder == 1) {
  2458. s_copy(crc, " CblasRowMajor", (ftnlen)14, (ftnlen)14);
  2459. } else {
  2460. s_copy(crc, " CblasColMajor", (ftnlen)14, (ftnlen)14);
  2461. }
  2462. printf("%6d: %s %s %s %s\n",*nc,sname,crc,cu,ca);
  2463. printf("%d %d %4.1f , A, %d, B, %d, %4.1f , C, %d.\n",*n,*k,*alpha,*lda,*ldb,*beta,*ldc);
  2464. } /* dprcn5_ */
  2465. /* Subroutine */ int dmake_(char* type__, char* uplo, char* diag, integer* m, integer* n, doublereal* a, integer* nmax, doublereal* aa, integer* lda, logical* reset, doublereal* transl, ftnlen type_len, ftnlen uplo_len, ftnlen diag_len)
  2466. {
  2467. /* System generated locals */
  2468. integer a_dim1, a_offset, i__1, i__2;
  2469. /* Local variables */
  2470. extern doublereal dbeg_(logical*);
  2471. static integer ibeg, iend;
  2472. static logical unit;
  2473. static integer i__, j;
  2474. static logical lower, upper, gen, tri, sym;
  2475. /* Generates values for an M by N matrix A. */
  2476. /* Stores the values in the array AA in the data structure required */
  2477. /* by the routine, with unwanted elements set to rogue value. */
  2478. /* TYPE is 'GE', 'SY' or 'TR'. */
  2479. /* Auxiliary routine for test program for Level 3 Blas. */
  2480. /* -- Written on 8-February-1989. */
  2481. /* Jack Dongarra, Argonne National Laboratory. */
  2482. /* Iain Duff, AERE Harwell. */
  2483. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2484. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2485. /* .. Parameters .. */
  2486. /* .. Scalar Arguments .. */
  2487. /* .. Array Arguments .. */
  2488. /* .. Local Scalars .. */
  2489. /* .. External Functions .. */
  2490. /* .. Executable Statements .. */
  2491. /* Parameter adjustments */
  2492. a_dim1 = *nmax;
  2493. a_offset = 1 + a_dim1 * 1;
  2494. a -= a_offset;
  2495. --aa;
  2496. /* Function Body */
  2497. gen = s_cmp(type__, "GE", (ftnlen)2, (ftnlen)2) == 0;
  2498. sym = s_cmp(type__, "SY", (ftnlen)2, (ftnlen)2) == 0;
  2499. tri = s_cmp(type__, "TR", (ftnlen)2, (ftnlen)2) == 0;
  2500. upper = (sym || tri) && *(unsigned char *)uplo == 'U';
  2501. lower = (sym || tri) && *(unsigned char *)uplo == 'L';
  2502. unit = tri && *(unsigned char *)diag == 'U';
  2503. /* Generate data in array A. */
  2504. i__1 = *n;
  2505. for (j = 1; j <= i__1; ++j) {
  2506. i__2 = *m;
  2507. for (i__ = 1; i__ <= i__2; ++i__) {
  2508. if (gen || (upper && i__ <= j) || (lower && i__ >= j)) {
  2509. a[i__ + j * a_dim1] = dbeg_(reset) + *transl;
  2510. if (i__ != j) {
  2511. /* Set some elements to zero */
  2512. if (*n > 3 && j == *n / 2) {
  2513. a[i__ + j * a_dim1] = 0.;
  2514. }
  2515. if (sym) {
  2516. a[j + i__ * a_dim1] = a[i__ + j * a_dim1];
  2517. } else if (tri) {
  2518. a[j + i__ * a_dim1] = 0.;
  2519. }
  2520. }
  2521. }
  2522. /* L10: */
  2523. }
  2524. if (tri) {
  2525. a[j + j * a_dim1] += 1.;
  2526. }
  2527. if (unit) {
  2528. a[j + j * a_dim1] = 1.;
  2529. }
  2530. /* L20: */
  2531. }
  2532. /* Store elements in array AS in data structure required by routine. */
  2533. if (s_cmp(type__, "GE", (ftnlen)2, (ftnlen)2) == 0) {
  2534. i__1 = *n;
  2535. for (j = 1; j <= i__1; ++j) {
  2536. i__2 = *m;
  2537. for (i__ = 1; i__ <= i__2; ++i__) {
  2538. aa[i__ + (j - 1) * *lda] = a[i__ + j * a_dim1];
  2539. /* L30: */
  2540. }
  2541. i__2 = *lda;
  2542. for (i__ = *m + 1; i__ <= i__2; ++i__) {
  2543. aa[i__ + (j - 1) * *lda] = -1e10;
  2544. /* L40: */
  2545. }
  2546. /* L50: */
  2547. }
  2548. } else if (s_cmp(type__, "SY", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(type__,
  2549. "TR", (ftnlen)2, (ftnlen)2) == 0) {
  2550. i__1 = *n;
  2551. for (j = 1; j <= i__1; ++j) {
  2552. if (upper) {
  2553. ibeg = 1;
  2554. if (unit) {
  2555. iend = j - 1;
  2556. } else {
  2557. iend = j;
  2558. }
  2559. } else {
  2560. if (unit) {
  2561. ibeg = j + 1;
  2562. } else {
  2563. ibeg = j;
  2564. }
  2565. iend = *n;
  2566. }
  2567. i__2 = ibeg - 1;
  2568. for (i__ = 1; i__ <= i__2; ++i__) {
  2569. aa[i__ + (j - 1) * *lda] = -1e10;
  2570. /* L60: */
  2571. }
  2572. i__2 = iend;
  2573. for (i__ = ibeg; i__ <= i__2; ++i__) {
  2574. aa[i__ + (j - 1) * *lda] = a[i__ + j * a_dim1];
  2575. /* L70: */
  2576. }
  2577. i__2 = *lda;
  2578. for (i__ = iend + 1; i__ <= i__2; ++i__) {
  2579. aa[i__ + (j - 1) * *lda] = -1e10;
  2580. /* L80: */
  2581. }
  2582. /* L90: */
  2583. }
  2584. }
  2585. return 0;
  2586. /* End of DMAKE. */
  2587. } /* dmake_ */
  2588. /* Subroutine */ int dmmch_(char* transa, char* transb, integer* m, integer* n, integer* kk, doublereal* alpha, doublereal* a, integer* lda, doublereal* b, integer* ldb, doublereal* beta, doublereal* c__, integer* ldc, doublereal* ct, doublereal* g, doublereal* cc, integer* ldcc, doublereal* eps, doublereal* err, logical* fatal, integer* nout, logical* mv, ftnlen transa_len, ftnlen transb_len)
  2589. {
  2590. /* System generated locals */
  2591. integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, cc_dim1,
  2592. cc_offset, i__1, i__2, i__3;
  2593. doublereal d__1, d__2;
  2594. /* Builtin functions */
  2595. double sqrt(double);
  2596. /* Local variables */
  2597. static doublereal erri;
  2598. static integer i__, j, k;
  2599. static logical trana, tranb;
  2600. /* Checks the results of the computational tests. */
  2601. /* Auxiliary routine for test program for Level 3 Blas. */
  2602. /* -- Written on 8-February-1989. */
  2603. /* Jack Dongarra, Argonne National Laboratory. */
  2604. /* Iain Duff, AERE Harwell. */
  2605. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2606. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2607. /* .. Parameters .. */
  2608. /* .. Scalar Arguments .. */
  2609. /* .. Array Arguments .. */
  2610. /* .. Local Scalars .. */
  2611. /* .. Intrinsic Functions .. */
  2612. /* .. Executable Statements .. */
  2613. /* Parameter adjustments */
  2614. a_dim1 = *lda;
  2615. a_offset = 1 + a_dim1 * 1;
  2616. a -= a_offset;
  2617. b_dim1 = *ldb;
  2618. b_offset = 1 + b_dim1 * 1;
  2619. b -= b_offset;
  2620. c_dim1 = *ldc;
  2621. c_offset = 1 + c_dim1 * 1;
  2622. c__ -= c_offset;
  2623. --ct;
  2624. --g;
  2625. cc_dim1 = *ldcc;
  2626. cc_offset = 1 + cc_dim1 * 1;
  2627. cc -= cc_offset;
  2628. /* Function Body */
  2629. trana = *(unsigned char *)transa == 'T' || *(unsigned char *)transa ==
  2630. 'C';
  2631. tranb = *(unsigned char *)transb == 'T' || *(unsigned char *)transb ==
  2632. 'C';
  2633. /* Compute expected result, one column at a time, in CT using data */
  2634. /* in A, B and C. */
  2635. /* Compute gauges in G. */
  2636. i__1 = *n;
  2637. for (j = 1; j <= i__1; ++j) {
  2638. i__2 = *m;
  2639. for (i__ = 1; i__ <= i__2; ++i__) {
  2640. ct[i__] = 0.;
  2641. g[i__] = 0.;
  2642. /* L10: */
  2643. }
  2644. if (! trana && ! tranb) {
  2645. i__2 = *kk;
  2646. for (k = 1; k <= i__2; ++k) {
  2647. i__3 = *m;
  2648. for (i__ = 1; i__ <= i__3; ++i__) {
  2649. ct[i__] += a[i__ + k * a_dim1] * b[k + j * b_dim1];
  2650. g[i__] += (d__1 = a[i__ + k * a_dim1], abs(d__1)) * (d__2
  2651. = b[k + j * b_dim1], abs(d__2));
  2652. /* L20: */
  2653. }
  2654. /* L30: */
  2655. }
  2656. } else if (trana && ! tranb) {
  2657. i__2 = *kk;
  2658. for (k = 1; k <= i__2; ++k) {
  2659. i__3 = *m;
  2660. for (i__ = 1; i__ <= i__3; ++i__) {
  2661. ct[i__] += a[k + i__ * a_dim1] * b[k + j * b_dim1];
  2662. g[i__] += (d__1 = a[k + i__ * a_dim1], abs(d__1)) * (d__2
  2663. = b[k + j * b_dim1], abs(d__2));
  2664. /* L40: */
  2665. }
  2666. /* L50: */
  2667. }
  2668. } else if (! trana && tranb) {
  2669. i__2 = *kk;
  2670. for (k = 1; k <= i__2; ++k) {
  2671. i__3 = *m;
  2672. for (i__ = 1; i__ <= i__3; ++i__) {
  2673. ct[i__] += a[i__ + k * a_dim1] * b[j + k * b_dim1];
  2674. g[i__] += (d__1 = a[i__ + k * a_dim1], abs(d__1)) * (d__2
  2675. = b[j + k * b_dim1], abs(d__2));
  2676. /* L60: */
  2677. }
  2678. /* L70: */
  2679. }
  2680. } else if (trana && tranb) {
  2681. i__2 = *kk;
  2682. for (k = 1; k <= i__2; ++k) {
  2683. i__3 = *m;
  2684. for (i__ = 1; i__ <= i__3; ++i__) {
  2685. ct[i__] += a[k + i__ * a_dim1] * b[j + k * b_dim1];
  2686. g[i__] += (d__1 = a[k + i__ * a_dim1], abs(d__1)) * (d__2
  2687. = b[j + k * b_dim1], abs(d__2));
  2688. /* L80: */
  2689. }
  2690. /* L90: */
  2691. }
  2692. }
  2693. i__2 = *m;
  2694. for (i__ = 1; i__ <= i__2; ++i__) {
  2695. ct[i__] = *alpha * ct[i__] + *beta * c__[i__ + j * c_dim1];
  2696. g[i__] = abs(*alpha) * g[i__] + abs(*beta) * (d__1 = c__[i__ + j *
  2697. c_dim1], abs(d__1));
  2698. /* L100: */
  2699. }
  2700. /* Compute the error ratio for this result. */
  2701. *err = 0.;
  2702. i__2 = *m;
  2703. for (i__ = 1; i__ <= i__2; ++i__) {
  2704. erri = (d__1 = ct[i__] - cc[i__ + j * cc_dim1], abs(d__1)) / *eps;
  2705. if (g[i__] != 0.) {
  2706. erri /= g[i__];
  2707. }
  2708. *err = f2cmax(*err,erri);
  2709. if (*err * sqrt(*eps) >= 1.) {
  2710. goto L130;
  2711. }
  2712. /* L110: */
  2713. }
  2714. /* L120: */
  2715. }
  2716. /* If the loop completes, all results are at least half accurate. */
  2717. goto L150;
  2718. /* Report fatal error. */
  2719. L130:
  2720. *fatal = TRUE_;
  2721. printf(" ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HALF ACCURATE *******\n");
  2722. printf(" EXPECTED RESULT COMPUTED RESULT\n");
  2723. i__1 = *m;
  2724. for (i__ = 1; i__ <= i__1; ++i__) {
  2725. if (*mv) {
  2726. printf("%7d %15.6g %15.6g\n",i__,ct[i__],cc[i__+j*cc_dim1]);
  2727. } else {
  2728. printf("%7d %15.6g %15.6g\n",i__,cc[i__+j*cc_dim1],ct[i__]);
  2729. }
  2730. /* L140: */
  2731. }
  2732. if (*n > 1) {
  2733. printf(" THESE ARE THE RESULTS FOR COLUMN %d\n",j);
  2734. }
  2735. L150:
  2736. return 0;
  2737. /* End of DMMCH. */
  2738. } /* dmmch_ */
  2739. logical lde_(doublereal* ri, doublereal* rj, integer* lr)
  2740. {
  2741. /* System generated locals */
  2742. integer i__1;
  2743. logical ret_val;
  2744. /* Local variables */
  2745. static integer i__;
  2746. /* Tests if two arrays are identical. */
  2747. /* Auxiliary routine for test program for Level 3 Blas. */
  2748. /* -- Written on 8-February-1989. */
  2749. /* Jack Dongarra, Argonne National Laboratory. */
  2750. /* Iain Duff, AERE Harwell. */
  2751. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2752. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2753. /* .. Scalar Arguments .. */
  2754. /* .. Array Arguments .. */
  2755. /* .. Local Scalars .. */
  2756. /* .. Executable Statements .. */
  2757. /* Parameter adjustments */
  2758. --rj;
  2759. --ri;
  2760. /* Function Body */
  2761. i__1 = *lr;
  2762. for (i__ = 1; i__ <= i__1; ++i__) {
  2763. if (ri[i__] != rj[i__]) {
  2764. goto L20;
  2765. }
  2766. /* L10: */
  2767. }
  2768. ret_val = TRUE_;
  2769. goto L30;
  2770. L20:
  2771. ret_val = FALSE_;
  2772. L30:
  2773. return ret_val;
  2774. /* End of LDE. */
  2775. } /* lde_ */
  2776. logical lderes_(char* type__, char* uplo, integer* m, integer* n, doublereal* aa, doublereal* as, integer* lda, ftnlen type_len, ftnlen uplo_len)
  2777. {
  2778. /* System generated locals */
  2779. integer aa_dim1, aa_offset, as_dim1, as_offset, i__1, i__2;
  2780. logical ret_val;
  2781. /* Local variables */
  2782. static integer ibeg, iend, i__, j;
  2783. static logical upper;
  2784. /* Tests if selected elements in two arrays are equal. */
  2785. /* TYPE is 'GE' or 'SY'. */
  2786. /* Auxiliary routine for test program for Level 3 Blas. */
  2787. /* -- Written on 8-February-1989. */
  2788. /* Jack Dongarra, Argonne National Laboratory. */
  2789. /* Iain Duff, AERE Harwell. */
  2790. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2791. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2792. /* .. Scalar Arguments .. */
  2793. /* .. Array Arguments .. */
  2794. /* .. Local Scalars .. */
  2795. /* .. Executable Statements .. */
  2796. /* Parameter adjustments */
  2797. as_dim1 = *lda;
  2798. as_offset = 1 + as_dim1 * 1;
  2799. as -= as_offset;
  2800. aa_dim1 = *lda;
  2801. aa_offset = 1 + aa_dim1 * 1;
  2802. aa -= aa_offset;
  2803. /* Function Body */
  2804. upper = *(unsigned char *)uplo == 'U';
  2805. if (s_cmp(type__, "GE", (ftnlen)2, (ftnlen)2) == 0) {
  2806. i__1 = *n;
  2807. for (j = 1; j <= i__1; ++j) {
  2808. i__2 = *lda;
  2809. for (i__ = *m + 1; i__ <= i__2; ++i__) {
  2810. if (aa[i__ + j * aa_dim1] != as[i__ + j * as_dim1]) {
  2811. goto L70;
  2812. }
  2813. /* L10: */
  2814. }
  2815. /* L20: */
  2816. }
  2817. } else if (s_cmp(type__, "SY", (ftnlen)2, (ftnlen)2) == 0) {
  2818. i__1 = *n;
  2819. for (j = 1; j <= i__1; ++j) {
  2820. if (upper) {
  2821. ibeg = 1;
  2822. iend = j;
  2823. } else {
  2824. ibeg = j;
  2825. iend = *n;
  2826. }
  2827. i__2 = ibeg - 1;
  2828. for (i__ = 1; i__ <= i__2; ++i__) {
  2829. if (aa[i__ + j * aa_dim1] != as[i__ + j * as_dim1]) {
  2830. goto L70;
  2831. }
  2832. /* L30: */
  2833. }
  2834. i__2 = *lda;
  2835. for (i__ = iend + 1; i__ <= i__2; ++i__) {
  2836. if (aa[i__ + j * aa_dim1] != as[i__ + j * as_dim1]) {
  2837. goto L70;
  2838. }
  2839. /* L40: */
  2840. }
  2841. /* L50: */
  2842. }
  2843. }
  2844. /* 60 CONTINUE */
  2845. ret_val = TRUE_;
  2846. goto L80;
  2847. L70:
  2848. ret_val = FALSE_;
  2849. L80:
  2850. return ret_val;
  2851. /* End of LDERES. */
  2852. } /* lderes_ */
  2853. doublereal dbeg_(logical* reset)
  2854. {
  2855. /* System generated locals */
  2856. doublereal ret_val;
  2857. /* Local variables */
  2858. static integer i__, ic, mi;
  2859. /* Generates random numbers uniformly distributed between -0.5 and 0.5. */
  2860. /* Auxiliary routine for test program for Level 3 Blas. */
  2861. /* -- Written on 8-February-1989. */
  2862. /* Jack Dongarra, Argonne National Laboratory. */
  2863. /* Iain Duff, AERE Harwell. */
  2864. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2865. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2866. /* .. Scalar Arguments .. */
  2867. /* .. Local Scalars .. */
  2868. /* .. Save statement .. */
  2869. /* .. Executable Statements .. */
  2870. if (*reset) {
  2871. /* Initialize local variables. */
  2872. mi = 891;
  2873. i__ = 7;
  2874. ic = 0;
  2875. *reset = FALSE_;
  2876. }
  2877. /* The sequence of values of I is bounded between 1 and 999. */
  2878. /* If initial I = 1,2,3,6,7 or 9, the period will be 50. */
  2879. /* If initial I = 4 or 8, the period will be 25. */
  2880. /* If initial I = 5, the period will be 10. */
  2881. /* IC is used to break up the period by skipping 1 value of I in 6. */
  2882. ++ic;
  2883. L10:
  2884. i__ *= mi;
  2885. i__ -= i__ / 1000 * 1000;
  2886. if (ic >= 5) {
  2887. ic = 0;
  2888. goto L10;
  2889. }
  2890. ret_val = (i__ - 500) / 1001.;
  2891. return ret_val;
  2892. /* End of DBEG. */
  2893. } /* dbeg_ */
  2894. doublereal ddiff_(doublereal* x, doublereal* y)
  2895. {
  2896. /* System generated locals */
  2897. doublereal ret_val;
  2898. /* Auxiliary routine for test program for Level 3 Blas. */
  2899. /* -- Written on 8-February-1989. */
  2900. /* Jack Dongarra, Argonne National Laboratory. */
  2901. /* Iain Duff, AERE Harwell. */
  2902. /* Jeremy Du Croz, Numerical Algorithms Group Ltd. */
  2903. /* Sven Hammarling, Numerical Algorithms Group Ltd. */
  2904. /* .. Scalar Arguments .. */
  2905. /* .. Executable Statements .. */
  2906. ret_val = *x - *y;
  2907. return ret_val;
  2908. /* End of DDIFF. */
  2909. } /* ddiff_ */
  2910. /* Main program alias */ /*int dblat3_ () { MAIN__ (); }*/