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.

cblat3.f 130 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441
  1. PROGRAM CBLAT3
  2. *
  3. * Test program for the COMPLEX Level 3 Blas.
  4. *
  5. * The program must be driven by a short data file. The first 14 records
  6. * of the file are read using list-directed input, the last 9 records
  7. * are read using the format ( A6, L2 ). An annotated example of a data
  8. * file can be obtained by deleting the first 3 characters from the
  9. * following 23 lines:
  10. * 'CBLAT3.SUMM' NAME OF SUMMARY OUTPUT FILE
  11. * 6 UNIT NUMBER OF SUMMARY FILE
  12. * 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
  13. * -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
  14. * F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
  15. * F LOGICAL FLAG, T TO STOP ON FAILURES.
  16. * T LOGICAL FLAG, T TO TEST ERROR EXITS.
  17. * 16.0 THRESHOLD VALUE OF TEST RATIO
  18. * 6 NUMBER OF VALUES OF N
  19. * 0 1 2 3 5 9 VALUES OF N
  20. * 3 NUMBER OF VALUES OF ALPHA
  21. * (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
  22. * 3 NUMBER OF VALUES OF BETA
  23. * (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
  24. * CGEMM T PUT F FOR NO TEST. SAME COLUMNS.
  25. * CHEMM T PUT F FOR NO TEST. SAME COLUMNS.
  26. * CSYMM T PUT F FOR NO TEST. SAME COLUMNS.
  27. * CTRMM T PUT F FOR NO TEST. SAME COLUMNS.
  28. * CTRSM T PUT F FOR NO TEST. SAME COLUMNS.
  29. * CHERK T PUT F FOR NO TEST. SAME COLUMNS.
  30. * CSYRK T PUT F FOR NO TEST. SAME COLUMNS.
  31. * CHER2K T PUT F FOR NO TEST. SAME COLUMNS.
  32. * CSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
  33. *
  34. * See:
  35. *
  36. * Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
  37. * A Set of Level 3 Basic Linear Algebra Subprograms.
  38. *
  39. * Technical Memorandum No.88 (Revision 1), Mathematics and
  40. * Computer Science Division, Argonne National Laboratory, 9700
  41. * South Cass Avenue, Argonne, Illinois 60439, US.
  42. *
  43. * -- Written on 8-February-1989.
  44. * Jack Dongarra, Argonne National Laboratory.
  45. * Iain Duff, AERE Harwell.
  46. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  47. * Sven Hammarling, Numerical Algorithms Group Ltd.
  48. *
  49. * .. Parameters ..
  50. INTEGER NIN
  51. PARAMETER ( NIN = 5 )
  52. INTEGER NSUBS
  53. PARAMETER ( NSUBS = 9 )
  54. COMPLEX ZERO, ONE
  55. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  56. REAL RZERO, RHALF, RONE
  57. PARAMETER ( RZERO = 0.0, RHALF = 0.5, RONE = 1.0 )
  58. INTEGER NMAX
  59. PARAMETER ( NMAX = 65 )
  60. INTEGER NIDMAX, NALMAX, NBEMAX
  61. PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
  62. * .. Local Scalars ..
  63. REAL EPS, ERR, THRESH
  64. INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
  65. LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
  66. $ TSTERR
  67. CHARACTER*1 TRANSA, TRANSB
  68. CHARACTER*6 SNAMET
  69. CHARACTER*32 SNAPS, SUMMRY
  70. * .. Local Arrays ..
  71. COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
  72. $ ALF( NALMAX ), AS( NMAX*NMAX ),
  73. $ BB( NMAX*NMAX ), BET( NBEMAX ),
  74. $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
  75. $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
  76. $ W( 2*NMAX )
  77. REAL G( NMAX )
  78. INTEGER IDIM( NIDMAX )
  79. LOGICAL LTEST( NSUBS )
  80. CHARACTER*6 SNAMES( NSUBS )
  81. * .. External Functions ..
  82. REAL SDIFF
  83. LOGICAL LCE
  84. EXTERNAL SDIFF, LCE
  85. * .. External Subroutines ..
  86. EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH
  87. * .. Intrinsic Functions ..
  88. INTRINSIC MAX, MIN
  89. * .. Scalars in Common ..
  90. INTEGER INFOT, NOUTC
  91. LOGICAL LERR, OK
  92. CHARACTER*6 SRNAMT
  93. * .. Common blocks ..
  94. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  95. COMMON /SRNAMC/SRNAMT
  96. * .. Data statements ..
  97. DATA SNAMES/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ',
  98. $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
  99. $ 'CSYR2K'/
  100. * .. Executable Statements ..
  101. *
  102. * Read name and unit number for summary output file and open file.
  103. *
  104. READ( NIN, FMT = * )SUMMRY
  105. READ( NIN, FMT = * )NOUT
  106. OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
  107. NOUTC = NOUT
  108. *
  109. * Read name and unit number for snapshot output file and open file.
  110. *
  111. READ( NIN, FMT = * )SNAPS
  112. READ( NIN, FMT = * )NTRA
  113. TRACE = NTRA.GE.0
  114. IF( TRACE )THEN
  115. OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
  116. END IF
  117. * Read the flag that directs rewinding of the snapshot file.
  118. READ( NIN, FMT = * )REWI
  119. REWI = REWI.AND.TRACE
  120. * Read the flag that directs stopping on any failure.
  121. READ( NIN, FMT = * )SFATAL
  122. * Read the flag that indicates whether error exits are to be tested.
  123. READ( NIN, FMT = * )TSTERR
  124. * Read the threshold value of the test ratio
  125. READ( NIN, FMT = * )THRESH
  126. *
  127. * Read and check the parameter values for the tests.
  128. *
  129. * Values of N
  130. READ( NIN, FMT = * )NIDIM
  131. IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
  132. WRITE( NOUT, FMT = 9997 )'N', NIDMAX
  133. GO TO 220
  134. END IF
  135. READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
  136. DO 10 I = 1, NIDIM
  137. IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
  138. WRITE( NOUT, FMT = 9996 )NMAX
  139. GO TO 220
  140. END IF
  141. 10 CONTINUE
  142. * Values of ALPHA
  143. READ( NIN, FMT = * )NALF
  144. IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
  145. WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
  146. GO TO 220
  147. END IF
  148. READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
  149. * Values of BETA
  150. READ( NIN, FMT = * )NBET
  151. IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
  152. WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
  153. GO TO 220
  154. END IF
  155. READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
  156. *
  157. * Report values of parameters.
  158. *
  159. WRITE( NOUT, FMT = 9995 )
  160. WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
  161. WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
  162. WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
  163. IF( .NOT.TSTERR )THEN
  164. WRITE( NOUT, FMT = * )
  165. WRITE( NOUT, FMT = 9984 )
  166. END IF
  167. WRITE( NOUT, FMT = * )
  168. WRITE( NOUT, FMT = 9999 )THRESH
  169. WRITE( NOUT, FMT = * )
  170. *
  171. * Read names of subroutines and flags which indicate
  172. * whether they are to be tested.
  173. *
  174. DO 20 I = 1, NSUBS
  175. LTEST( I ) = .FALSE.
  176. 20 CONTINUE
  177. 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
  178. DO 40 I = 1, NSUBS
  179. IF( SNAMET.EQ.SNAMES( I ) )
  180. $ GO TO 50
  181. 40 CONTINUE
  182. WRITE( NOUT, FMT = 9990 )SNAMET
  183. STOP
  184. 50 LTEST( I ) = LTESTT
  185. GO TO 30
  186. *
  187. 60 CONTINUE
  188. CLOSE ( NIN )
  189. *
  190. * Compute EPS (the machine precision).
  191. *
  192. EPS = RONE
  193. 70 CONTINUE
  194. IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO )
  195. $ GO TO 80
  196. EPS = RHALF*EPS
  197. GO TO 70
  198. 80 CONTINUE
  199. EPS = EPS + EPS
  200. WRITE( NOUT, FMT = 9998 )EPS
  201. *
  202. * Check the reliability of CMMCH using exact data.
  203. *
  204. N = MIN( 32, NMAX )
  205. DO 100 J = 1, N
  206. DO 90 I = 1, N
  207. AB( I, J ) = MAX( I - J + 1, 0 )
  208. 90 CONTINUE
  209. AB( J, NMAX + 1 ) = J
  210. AB( 1, NMAX + J ) = J
  211. C( J, 1 ) = ZERO
  212. 100 CONTINUE
  213. DO 110 J = 1, N
  214. CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
  215. 110 CONTINUE
  216. * CC holds the exact result. On exit from CMMCH CT holds
  217. * the result computed by CMMCH.
  218. TRANSA = 'N'
  219. TRANSB = 'N'
  220. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  221. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  222. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  223. SAME = LCE( CC, CT, N )
  224. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  225. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  226. STOP
  227. END IF
  228. TRANSB = 'C'
  229. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  230. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  231. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  232. SAME = LCE( CC, CT, N )
  233. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  234. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  235. STOP
  236. END IF
  237. DO 120 J = 1, N
  238. AB( J, NMAX + 1 ) = N - J + 1
  239. AB( 1, NMAX + J ) = N - J + 1
  240. 120 CONTINUE
  241. DO 130 J = 1, N
  242. CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
  243. $ ( ( J + 1 )*J*( J - 1 ) )/3
  244. 130 CONTINUE
  245. TRANSA = 'C'
  246. TRANSB = 'N'
  247. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  248. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  249. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  250. SAME = LCE( CC, CT, N )
  251. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  252. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  253. STOP
  254. END IF
  255. TRANSB = 'C'
  256. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  257. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  258. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  259. SAME = LCE( CC, CT, N )
  260. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  261. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  262. STOP
  263. END IF
  264. *
  265. * Test each subroutine in turn.
  266. *
  267. DO 200 ISNUM = 1, NSUBS
  268. WRITE( NOUT, FMT = * )
  269. IF( .NOT.LTEST( ISNUM ) )THEN
  270. * Subprogram is not to be tested.
  271. WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
  272. ELSE
  273. SRNAMT = SNAMES( ISNUM )
  274. * Test error exits.
  275. IF( TSTERR )THEN
  276. CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
  277. WRITE( NOUT, FMT = * )
  278. END IF
  279. * Test computations.
  280. INFOT = 0
  281. OK = .TRUE.
  282. FATAL = .FALSE.
  283. GO TO ( 140, 150, 150, 160, 160, 170, 170,
  284. $ 180, 180 )ISNUM
  285. * Test CGEMM, 01.
  286. 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  287. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  288. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  289. $ CC, CS, CT, G )
  290. GO TO 190
  291. * Test CHEMM, 02, CSYMM, 03.
  292. 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  293. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  294. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  295. $ CC, CS, CT, G )
  296. GO TO 190
  297. * Test CTRMM, 04, CTRSM, 05.
  298. 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  299. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
  300. $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
  301. GO TO 190
  302. * Test CHERK, 06, CSYRK, 07.
  303. 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  304. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  305. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  306. $ CC, CS, CT, G )
  307. GO TO 190
  308. * Test CHER2K, 08, CSYR2K, 09.
  309. 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  310. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  311. $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
  312. GO TO 190
  313. *
  314. 190 IF( FATAL.AND.SFATAL )
  315. $ GO TO 210
  316. END IF
  317. 200 CONTINUE
  318. WRITE( NOUT, FMT = 9986 )
  319. GO TO 230
  320. *
  321. 210 CONTINUE
  322. WRITE( NOUT, FMT = 9985 )
  323. GO TO 230
  324. *
  325. 220 CONTINUE
  326. WRITE( NOUT, FMT = 9991 )
  327. *
  328. 230 CONTINUE
  329. IF( TRACE )
  330. $ CLOSE ( NTRA )
  331. CLOSE ( NOUT )
  332. STOP
  333. *
  334. 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
  335. $ 'S THAN', F8.2 )
  336. 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
  337. 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
  338. $ 'THAN ', I2 )
  339. 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
  340. 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
  341. $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
  342. 9994 FORMAT( ' FOR N ', 9I6 )
  343. 9993 FORMAT( ' FOR ALPHA ',
  344. $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
  345. 9992 FORMAT( ' FOR BETA ',
  346. $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
  347. 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
  348. $ /' ******* TESTS ABANDONED *******' )
  349. 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
  350. $ 'ESTS ABANDONED *******' )
  351. 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
  352. $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
  353. $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
  354. $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
  355. $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
  356. $ '*******' )
  357. 9988 FORMAT( A6, L2 )
  358. 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
  359. 9986 FORMAT( /' END OF TESTS' )
  360. 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
  361. 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
  362. *
  363. * End of CBLAT3.
  364. *
  365. END
  366. SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  367. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  368. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  369. *
  370. * Tests CGEMM.
  371. *
  372. * Auxiliary routine for test program for Level 3 Blas.
  373. *
  374. * -- Written on 8-February-1989.
  375. * Jack Dongarra, Argonne National Laboratory.
  376. * Iain Duff, AERE Harwell.
  377. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  378. * Sven Hammarling, Numerical Algorithms Group Ltd.
  379. *
  380. * .. Parameters ..
  381. COMPLEX ZERO
  382. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  383. REAL RZERO
  384. PARAMETER ( RZERO = 0.0 )
  385. * .. Scalar Arguments ..
  386. REAL EPS, THRESH
  387. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  388. LOGICAL FATAL, REWI, TRACE
  389. CHARACTER*6 SNAME
  390. * .. Array Arguments ..
  391. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  392. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  393. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  394. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  395. $ CS( NMAX*NMAX ), CT( NMAX )
  396. REAL G( NMAX )
  397. INTEGER IDIM( NIDIM )
  398. * .. Local Scalars ..
  399. COMPLEX ALPHA, ALS, BETA, BLS
  400. REAL ERR, ERRMAX
  401. INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
  402. $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
  403. $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
  404. LOGICAL NULL, RESET, SAME, TRANA, TRANB
  405. CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
  406. CHARACTER*3 ICH
  407. * .. Local Arrays ..
  408. LOGICAL ISAME( 13 )
  409. * .. External Functions ..
  410. LOGICAL LCE, LCERES
  411. EXTERNAL LCE, LCERES
  412. * .. External Subroutines ..
  413. EXTERNAL CGEMM, CMAKE, CMMCH
  414. * .. Intrinsic Functions ..
  415. INTRINSIC MAX
  416. * .. Scalars in Common ..
  417. INTEGER INFOT, NOUTC
  418. LOGICAL LERR, OK
  419. * .. Common blocks ..
  420. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  421. * .. Data statements ..
  422. DATA ICH/'NTC'/
  423. * .. Executable Statements ..
  424. *
  425. NARGS = 13
  426. NC = 0
  427. RESET = .TRUE.
  428. ERRMAX = RZERO
  429. *
  430. DO 110 IM = 1, NIDIM
  431. M = IDIM( IM )
  432. *
  433. DO 100 IN = 1, NIDIM
  434. N = IDIM( IN )
  435. * Set LDC to 1 more than minimum value if room.
  436. LDC = M
  437. IF( LDC.LT.NMAX )
  438. $ LDC = LDC + 1
  439. * Skip tests if not enough room.
  440. IF( LDC.GT.NMAX )
  441. $ GO TO 100
  442. LCC = LDC*N
  443. NULL = N.LE.0.OR.M.LE.0
  444. *
  445. DO 90 IK = 1, NIDIM
  446. K = IDIM( IK )
  447. *
  448. DO 80 ICA = 1, 3
  449. TRANSA = ICH( ICA: ICA )
  450. TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
  451. *
  452. IF( TRANA )THEN
  453. MA = K
  454. NA = M
  455. ELSE
  456. MA = M
  457. NA = K
  458. END IF
  459. * Set LDA to 1 more than minimum value if room.
  460. LDA = MA
  461. IF( LDA.LT.NMAX )
  462. $ LDA = LDA + 1
  463. * Skip tests if not enough room.
  464. IF( LDA.GT.NMAX )
  465. $ GO TO 80
  466. LAA = LDA*NA
  467. *
  468. * Generate the matrix A.
  469. *
  470. CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
  471. $ RESET, ZERO )
  472. *
  473. DO 70 ICB = 1, 3
  474. TRANSB = ICH( ICB: ICB )
  475. TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
  476. *
  477. IF( TRANB )THEN
  478. MB = N
  479. NB = K
  480. ELSE
  481. MB = K
  482. NB = N
  483. END IF
  484. * Set LDB to 1 more than minimum value if room.
  485. LDB = MB
  486. IF( LDB.LT.NMAX )
  487. $ LDB = LDB + 1
  488. * Skip tests if not enough room.
  489. IF( LDB.GT.NMAX )
  490. $ GO TO 70
  491. LBB = LDB*NB
  492. *
  493. * Generate the matrix B.
  494. *
  495. CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
  496. $ LDB, RESET, ZERO )
  497. *
  498. DO 60 IA = 1, NALF
  499. ALPHA = ALF( IA )
  500. *
  501. DO 50 IB = 1, NBET
  502. BETA = BET( IB )
  503. *
  504. * Generate the matrix C.
  505. *
  506. CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
  507. $ CC, LDC, RESET, ZERO )
  508. *
  509. NC = NC + 1
  510. *
  511. * Save every datum before calling the
  512. * subroutine.
  513. *
  514. TRANAS = TRANSA
  515. TRANBS = TRANSB
  516. MS = M
  517. NS = N
  518. KS = K
  519. ALS = ALPHA
  520. DO 10 I = 1, LAA
  521. AS( I ) = AA( I )
  522. 10 CONTINUE
  523. LDAS = LDA
  524. DO 20 I = 1, LBB
  525. BS( I ) = BB( I )
  526. 20 CONTINUE
  527. LDBS = LDB
  528. BLS = BETA
  529. DO 30 I = 1, LCC
  530. CS( I ) = CC( I )
  531. 30 CONTINUE
  532. LDCS = LDC
  533. *
  534. * Call the subroutine.
  535. *
  536. IF( TRACE )
  537. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  538. $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
  539. $ BETA, LDC
  540. IF( REWI )
  541. $ REWIND NTRA
  542. CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
  543. $ AA, LDA, BB, LDB, BETA, CC, LDC )
  544. *
  545. * Check if error-exit was taken incorrectly.
  546. *
  547. IF( .NOT.OK )THEN
  548. WRITE( NOUT, FMT = 9994 )
  549. FATAL = .TRUE.
  550. GO TO 120
  551. END IF
  552. *
  553. * See what data changed inside subroutines.
  554. *
  555. ISAME( 1 ) = TRANSA.EQ.TRANAS
  556. ISAME( 2 ) = TRANSB.EQ.TRANBS
  557. ISAME( 3 ) = MS.EQ.M
  558. ISAME( 4 ) = NS.EQ.N
  559. ISAME( 5 ) = KS.EQ.K
  560. ISAME( 6 ) = ALS.EQ.ALPHA
  561. ISAME( 7 ) = LCE( AS, AA, LAA )
  562. ISAME( 8 ) = LDAS.EQ.LDA
  563. ISAME( 9 ) = LCE( BS, BB, LBB )
  564. ISAME( 10 ) = LDBS.EQ.LDB
  565. ISAME( 11 ) = BLS.EQ.BETA
  566. IF( NULL )THEN
  567. ISAME( 12 ) = LCE( CS, CC, LCC )
  568. ELSE
  569. ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
  570. $ CC, LDC )
  571. END IF
  572. ISAME( 13 ) = LDCS.EQ.LDC
  573. *
  574. * If data was incorrectly changed, report
  575. * and return.
  576. *
  577. SAME = .TRUE.
  578. DO 40 I = 1, NARGS
  579. SAME = SAME.AND.ISAME( I )
  580. IF( .NOT.ISAME( I ) )
  581. $ WRITE( NOUT, FMT = 9998 )I
  582. 40 CONTINUE
  583. IF( .NOT.SAME )THEN
  584. FATAL = .TRUE.
  585. GO TO 120
  586. END IF
  587. *
  588. IF( .NOT.NULL )THEN
  589. *
  590. * Check the result.
  591. *
  592. CALL CMMCH( TRANSA, TRANSB, M, N, K,
  593. $ ALPHA, A, NMAX, B, NMAX, BETA,
  594. $ C, NMAX, CT, G, CC, LDC, EPS,
  595. $ ERR, FATAL, NOUT, .TRUE. )
  596. ERRMAX = MAX( ERRMAX, ERR )
  597. * If got really bad answer, report and
  598. * return.
  599. IF( FATAL )
  600. $ GO TO 120
  601. END IF
  602. *
  603. 50 CONTINUE
  604. *
  605. 60 CONTINUE
  606. *
  607. 70 CONTINUE
  608. *
  609. 80 CONTINUE
  610. *
  611. 90 CONTINUE
  612. *
  613. 100 CONTINUE
  614. *
  615. 110 CONTINUE
  616. *
  617. * Report result.
  618. *
  619. IF( ERRMAX.LT.THRESH )THEN
  620. WRITE( NOUT, FMT = 9999 )SNAME, NC
  621. ELSE
  622. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  623. END IF
  624. GO TO 130
  625. *
  626. 120 CONTINUE
  627. WRITE( NOUT, FMT = 9996 )SNAME
  628. WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
  629. $ ALPHA, LDA, LDB, BETA, LDC
  630. *
  631. 130 CONTINUE
  632. RETURN
  633. *
  634. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  635. $ 'S)' )
  636. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  637. $ 'ANGED INCORRECTLY *******' )
  638. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  639. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  640. $ ' - SUSPECT *******' )
  641. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  642. 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
  643. $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
  644. $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
  645. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  646. $ '******' )
  647. *
  648. * End of CCHK1.
  649. *
  650. END
  651. SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  652. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  653. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  654. *
  655. * Tests CHEMM and CSYMM.
  656. *
  657. * Auxiliary routine for test program for Level 3 Blas.
  658. *
  659. * -- Written on 8-February-1989.
  660. * Jack Dongarra, Argonne National Laboratory.
  661. * Iain Duff, AERE Harwell.
  662. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  663. * Sven Hammarling, Numerical Algorithms Group Ltd.
  664. *
  665. * .. Parameters ..
  666. COMPLEX ZERO
  667. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  668. REAL RZERO
  669. PARAMETER ( RZERO = 0.0 )
  670. * .. Scalar Arguments ..
  671. REAL EPS, THRESH
  672. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  673. LOGICAL FATAL, REWI, TRACE
  674. CHARACTER*6 SNAME
  675. * .. Array Arguments ..
  676. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  677. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  678. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  679. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  680. $ CS( NMAX*NMAX ), CT( NMAX )
  681. REAL G( NMAX )
  682. INTEGER IDIM( NIDIM )
  683. * .. Local Scalars ..
  684. COMPLEX ALPHA, ALS, BETA, BLS
  685. REAL ERR, ERRMAX
  686. INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
  687. $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
  688. $ NARGS, NC, NS
  689. LOGICAL CONJ, LEFT, NULL, RESET, SAME
  690. CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
  691. CHARACTER*2 ICHS, ICHU
  692. * .. Local Arrays ..
  693. LOGICAL ISAME( 13 )
  694. * .. External Functions ..
  695. LOGICAL LCE, LCERES
  696. EXTERNAL LCE, LCERES
  697. * .. External Subroutines ..
  698. EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
  699. * .. Intrinsic Functions ..
  700. INTRINSIC MAX
  701. * .. Scalars in Common ..
  702. INTEGER INFOT, NOUTC
  703. LOGICAL LERR, OK
  704. * .. Common blocks ..
  705. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  706. * .. Data statements ..
  707. DATA ICHS/'LR'/, ICHU/'UL'/
  708. * .. Executable Statements ..
  709. CONJ = SNAME( 2: 3 ).EQ.'HE'
  710. *
  711. NARGS = 12
  712. NC = 0
  713. RESET = .TRUE.
  714. ERRMAX = RZERO
  715. *
  716. DO 100 IM = 1, NIDIM
  717. M = IDIM( IM )
  718. *
  719. DO 90 IN = 1, NIDIM
  720. N = IDIM( IN )
  721. * Set LDC to 1 more than minimum value if room.
  722. LDC = M
  723. IF( LDC.LT.NMAX )
  724. $ LDC = LDC + 1
  725. * Skip tests if not enough room.
  726. IF( LDC.GT.NMAX )
  727. $ GO TO 90
  728. LCC = LDC*N
  729. NULL = N.LE.0.OR.M.LE.0
  730. * Set LDB to 1 more than minimum value if room.
  731. LDB = M
  732. IF( LDB.LT.NMAX )
  733. $ LDB = LDB + 1
  734. * Skip tests if not enough room.
  735. IF( LDB.GT.NMAX )
  736. $ GO TO 90
  737. LBB = LDB*N
  738. *
  739. * Generate the matrix B.
  740. *
  741. CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
  742. $ ZERO )
  743. *
  744. DO 80 ICS = 1, 2
  745. SIDE = ICHS( ICS: ICS )
  746. LEFT = SIDE.EQ.'L'
  747. *
  748. IF( LEFT )THEN
  749. NA = M
  750. ELSE
  751. NA = N
  752. END IF
  753. * Set LDA to 1 more than minimum value if room.
  754. LDA = NA
  755. IF( LDA.LT.NMAX )
  756. $ LDA = LDA + 1
  757. * Skip tests if not enough room.
  758. IF( LDA.GT.NMAX )
  759. $ GO TO 80
  760. LAA = LDA*NA
  761. *
  762. DO 70 ICU = 1, 2
  763. UPLO = ICHU( ICU: ICU )
  764. *
  765. * Generate the hermitian or symmetric matrix A.
  766. *
  767. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
  768. $ AA, LDA, RESET, ZERO )
  769. *
  770. DO 60 IA = 1, NALF
  771. ALPHA = ALF( IA )
  772. *
  773. DO 50 IB = 1, NBET
  774. BETA = BET( IB )
  775. *
  776. * Generate the matrix C.
  777. *
  778. CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
  779. $ LDC, RESET, ZERO )
  780. *
  781. NC = NC + 1
  782. *
  783. * Save every datum before calling the
  784. * subroutine.
  785. *
  786. SIDES = SIDE
  787. UPLOS = UPLO
  788. MS = M
  789. NS = N
  790. ALS = ALPHA
  791. DO 10 I = 1, LAA
  792. AS( I ) = AA( I )
  793. 10 CONTINUE
  794. LDAS = LDA
  795. DO 20 I = 1, LBB
  796. BS( I ) = BB( I )
  797. 20 CONTINUE
  798. LDBS = LDB
  799. BLS = BETA
  800. DO 30 I = 1, LCC
  801. CS( I ) = CC( I )
  802. 30 CONTINUE
  803. LDCS = LDC
  804. *
  805. * Call the subroutine.
  806. *
  807. IF( TRACE )
  808. $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
  809. $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
  810. IF( REWI )
  811. $ REWIND NTRA
  812. IF( CONJ )THEN
  813. CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
  814. $ BB, LDB, BETA, CC, LDC )
  815. ELSE
  816. CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
  817. $ BB, LDB, BETA, CC, LDC )
  818. END IF
  819. *
  820. * Check if error-exit was taken incorrectly.
  821. *
  822. IF( .NOT.OK )THEN
  823. WRITE( NOUT, FMT = 9994 )
  824. FATAL = .TRUE.
  825. GO TO 110
  826. END IF
  827. *
  828. * See what data changed inside subroutines.
  829. *
  830. ISAME( 1 ) = SIDES.EQ.SIDE
  831. ISAME( 2 ) = UPLOS.EQ.UPLO
  832. ISAME( 3 ) = MS.EQ.M
  833. ISAME( 4 ) = NS.EQ.N
  834. ISAME( 5 ) = ALS.EQ.ALPHA
  835. ISAME( 6 ) = LCE( AS, AA, LAA )
  836. ISAME( 7 ) = LDAS.EQ.LDA
  837. ISAME( 8 ) = LCE( BS, BB, LBB )
  838. ISAME( 9 ) = LDBS.EQ.LDB
  839. ISAME( 10 ) = BLS.EQ.BETA
  840. IF( NULL )THEN
  841. ISAME( 11 ) = LCE( CS, CC, LCC )
  842. ELSE
  843. ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
  844. $ CC, LDC )
  845. END IF
  846. ISAME( 12 ) = LDCS.EQ.LDC
  847. *
  848. * If data was incorrectly changed, report and
  849. * return.
  850. *
  851. SAME = .TRUE.
  852. DO 40 I = 1, NARGS
  853. SAME = SAME.AND.ISAME( I )
  854. IF( .NOT.ISAME( I ) )
  855. $ WRITE( NOUT, FMT = 9998 )I
  856. 40 CONTINUE
  857. IF( .NOT.SAME )THEN
  858. FATAL = .TRUE.
  859. GO TO 110
  860. END IF
  861. *
  862. IF( .NOT.NULL )THEN
  863. *
  864. * Check the result.
  865. *
  866. IF( LEFT )THEN
  867. CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
  868. $ NMAX, B, NMAX, BETA, C, NMAX,
  869. $ CT, G, CC, LDC, EPS, ERR,
  870. $ FATAL, NOUT, .TRUE. )
  871. ELSE
  872. CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
  873. $ NMAX, A, NMAX, BETA, C, NMAX,
  874. $ CT, G, CC, LDC, EPS, ERR,
  875. $ FATAL, NOUT, .TRUE. )
  876. END IF
  877. ERRMAX = MAX( ERRMAX, ERR )
  878. * If got really bad answer, report and
  879. * return.
  880. IF( FATAL )
  881. $ GO TO 110
  882. END IF
  883. *
  884. 50 CONTINUE
  885. *
  886. 60 CONTINUE
  887. *
  888. 70 CONTINUE
  889. *
  890. 80 CONTINUE
  891. *
  892. 90 CONTINUE
  893. *
  894. 100 CONTINUE
  895. *
  896. * Report result.
  897. *
  898. IF( ERRMAX.LT.THRESH )THEN
  899. WRITE( NOUT, FMT = 9999 )SNAME, NC
  900. ELSE
  901. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  902. END IF
  903. GO TO 120
  904. *
  905. 110 CONTINUE
  906. WRITE( NOUT, FMT = 9996 )SNAME
  907. WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
  908. $ LDB, BETA, LDC
  909. *
  910. 120 CONTINUE
  911. RETURN
  912. *
  913. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  914. $ 'S)' )
  915. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  916. $ 'ANGED INCORRECTLY *******' )
  917. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  918. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  919. $ ' - SUSPECT *******' )
  920. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  921. 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  922. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
  923. $ ',', F4.1, '), C,', I3, ') .' )
  924. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  925. $ '******' )
  926. *
  927. * End of CCHK2.
  928. *
  929. END
  930. SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  931. $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
  932. $ B, BB, BS, CT, G, C )
  933. *
  934. * Tests CTRMM and CTRSM.
  935. *
  936. * Auxiliary routine for test program for Level 3 Blas.
  937. *
  938. * -- Written on 8-February-1989.
  939. * Jack Dongarra, Argonne National Laboratory.
  940. * Iain Duff, AERE Harwell.
  941. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  942. * Sven Hammarling, Numerical Algorithms Group Ltd.
  943. *
  944. * .. Parameters ..
  945. COMPLEX ZERO, ONE
  946. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  947. REAL RZERO
  948. PARAMETER ( RZERO = 0.0 )
  949. * .. Scalar Arguments ..
  950. REAL EPS, THRESH
  951. INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
  952. LOGICAL FATAL, REWI, TRACE
  953. CHARACTER*6 SNAME
  954. * .. Array Arguments ..
  955. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  956. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  957. $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
  958. $ C( NMAX, NMAX ), CT( NMAX )
  959. REAL G( NMAX )
  960. INTEGER IDIM( NIDIM )
  961. * .. Local Scalars ..
  962. COMPLEX ALPHA, ALS
  963. REAL ERR, ERRMAX
  964. INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
  965. $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
  966. $ NS
  967. LOGICAL LEFT, NULL, RESET, SAME
  968. CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
  969. $ UPLOS
  970. CHARACTER*2 ICHD, ICHS, ICHU
  971. CHARACTER*3 ICHT
  972. * .. Local Arrays ..
  973. LOGICAL ISAME( 13 )
  974. * .. External Functions ..
  975. LOGICAL LCE, LCERES
  976. EXTERNAL LCE, LCERES
  977. * .. External Subroutines ..
  978. EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
  979. * .. Intrinsic Functions ..
  980. INTRINSIC MAX
  981. * .. Scalars in Common ..
  982. INTEGER INFOT, NOUTC
  983. LOGICAL LERR, OK
  984. * .. Common blocks ..
  985. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  986. * .. Data statements ..
  987. DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
  988. * .. Executable Statements ..
  989. *
  990. NARGS = 11
  991. NC = 0
  992. RESET = .TRUE.
  993. ERRMAX = RZERO
  994. * Set up zero matrix for CMMCH.
  995. DO 20 J = 1, NMAX
  996. DO 10 I = 1, NMAX
  997. C( I, J ) = ZERO
  998. 10 CONTINUE
  999. 20 CONTINUE
  1000. *
  1001. DO 140 IM = 1, NIDIM
  1002. M = IDIM( IM )
  1003. *
  1004. DO 130 IN = 1, NIDIM
  1005. N = IDIM( IN )
  1006. * Set LDB to 1 more than minimum value if room.
  1007. LDB = M
  1008. IF( LDB.LT.NMAX )
  1009. $ LDB = LDB + 1
  1010. * Skip tests if not enough room.
  1011. IF( LDB.GT.NMAX )
  1012. $ GO TO 130
  1013. LBB = LDB*N
  1014. NULL = M.LE.0.OR.N.LE.0
  1015. *
  1016. DO 120 ICS = 1, 2
  1017. SIDE = ICHS( ICS: ICS )
  1018. LEFT = SIDE.EQ.'L'
  1019. IF( LEFT )THEN
  1020. NA = M
  1021. ELSE
  1022. NA = N
  1023. END IF
  1024. * Set LDA to 1 more than minimum value if room.
  1025. LDA = NA
  1026. IF( LDA.LT.NMAX )
  1027. $ LDA = LDA + 1
  1028. * Skip tests if not enough room.
  1029. IF( LDA.GT.NMAX )
  1030. $ GO TO 130
  1031. LAA = LDA*NA
  1032. *
  1033. DO 110 ICU = 1, 2
  1034. UPLO = ICHU( ICU: ICU )
  1035. *
  1036. DO 100 ICT = 1, 3
  1037. TRANSA = ICHT( ICT: ICT )
  1038. *
  1039. DO 90 ICD = 1, 2
  1040. DIAG = ICHD( ICD: ICD )
  1041. *
  1042. DO 80 IA = 1, NALF
  1043. ALPHA = ALF( IA )
  1044. *
  1045. * Generate the matrix A.
  1046. *
  1047. CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
  1048. $ NMAX, AA, LDA, RESET, ZERO )
  1049. *
  1050. * Generate the matrix B.
  1051. *
  1052. CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
  1053. $ BB, LDB, RESET, ZERO )
  1054. *
  1055. NC = NC + 1
  1056. *
  1057. * Save every datum before calling the
  1058. * subroutine.
  1059. *
  1060. SIDES = SIDE
  1061. UPLOS = UPLO
  1062. TRANAS = TRANSA
  1063. DIAGS = DIAG
  1064. MS = M
  1065. NS = N
  1066. ALS = ALPHA
  1067. DO 30 I = 1, LAA
  1068. AS( I ) = AA( I )
  1069. 30 CONTINUE
  1070. LDAS = LDA
  1071. DO 40 I = 1, LBB
  1072. BS( I ) = BB( I )
  1073. 40 CONTINUE
  1074. LDBS = LDB
  1075. *
  1076. * Call the subroutine.
  1077. *
  1078. IF( SNAME( 4: 5 ).EQ.'MM' )THEN
  1079. IF( TRACE )
  1080. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  1081. $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
  1082. $ LDA, LDB
  1083. IF( REWI )
  1084. $ REWIND NTRA
  1085. CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
  1086. $ N, ALPHA, AA, LDA, BB, LDB )
  1087. ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
  1088. IF( TRACE )
  1089. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  1090. $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
  1091. $ LDA, LDB
  1092. IF( REWI )
  1093. $ REWIND NTRA
  1094. CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
  1095. $ N, ALPHA, AA, LDA, BB, LDB )
  1096. END IF
  1097. *
  1098. * Check if error-exit was taken incorrectly.
  1099. *
  1100. IF( .NOT.OK )THEN
  1101. WRITE( NOUT, FMT = 9994 )
  1102. FATAL = .TRUE.
  1103. GO TO 150
  1104. END IF
  1105. *
  1106. * See what data changed inside subroutines.
  1107. *
  1108. ISAME( 1 ) = SIDES.EQ.SIDE
  1109. ISAME( 2 ) = UPLOS.EQ.UPLO
  1110. ISAME( 3 ) = TRANAS.EQ.TRANSA
  1111. ISAME( 4 ) = DIAGS.EQ.DIAG
  1112. ISAME( 5 ) = MS.EQ.M
  1113. ISAME( 6 ) = NS.EQ.N
  1114. ISAME( 7 ) = ALS.EQ.ALPHA
  1115. ISAME( 8 ) = LCE( AS, AA, LAA )
  1116. ISAME( 9 ) = LDAS.EQ.LDA
  1117. IF( NULL )THEN
  1118. ISAME( 10 ) = LCE( BS, BB, LBB )
  1119. ELSE
  1120. ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
  1121. $ BB, LDB )
  1122. END IF
  1123. ISAME( 11 ) = LDBS.EQ.LDB
  1124. *
  1125. * If data was incorrectly changed, report and
  1126. * return.
  1127. *
  1128. SAME = .TRUE.
  1129. DO 50 I = 1, NARGS
  1130. SAME = SAME.AND.ISAME( I )
  1131. IF( .NOT.ISAME( I ) )
  1132. $ WRITE( NOUT, FMT = 9998 )I
  1133. 50 CONTINUE
  1134. IF( .NOT.SAME )THEN
  1135. FATAL = .TRUE.
  1136. GO TO 150
  1137. END IF
  1138. *
  1139. IF( .NOT.NULL )THEN
  1140. IF( SNAME( 4: 5 ).EQ.'MM' )THEN
  1141. *
  1142. * Check the result.
  1143. *
  1144. IF( LEFT )THEN
  1145. CALL CMMCH( TRANSA, 'N', M, N, M,
  1146. $ ALPHA, A, NMAX, B, NMAX,
  1147. $ ZERO, C, NMAX, CT, G,
  1148. $ BB, LDB, EPS, ERR,
  1149. $ FATAL, NOUT, .TRUE. )
  1150. ELSE
  1151. CALL CMMCH( 'N', TRANSA, M, N, N,
  1152. $ ALPHA, B, NMAX, A, NMAX,
  1153. $ ZERO, C, NMAX, CT, G,
  1154. $ BB, LDB, EPS, ERR,
  1155. $ FATAL, NOUT, .TRUE. )
  1156. END IF
  1157. ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
  1158. *
  1159. * Compute approximation to original
  1160. * matrix.
  1161. *
  1162. DO 70 J = 1, N
  1163. DO 60 I = 1, M
  1164. C( I, J ) = BB( I + ( J - 1 )*
  1165. $ LDB )
  1166. BB( I + ( J - 1 )*LDB ) = ALPHA*
  1167. $ B( I, J )
  1168. 60 CONTINUE
  1169. 70 CONTINUE
  1170. *
  1171. IF( LEFT )THEN
  1172. CALL CMMCH( TRANSA, 'N', M, N, M,
  1173. $ ONE, A, NMAX, C, NMAX,
  1174. $ ZERO, B, NMAX, CT, G,
  1175. $ BB, LDB, EPS, ERR,
  1176. $ FATAL, NOUT, .FALSE. )
  1177. ELSE
  1178. CALL CMMCH( 'N', TRANSA, M, N, N,
  1179. $ ONE, C, NMAX, A, NMAX,
  1180. $ ZERO, B, NMAX, CT, G,
  1181. $ BB, LDB, EPS, ERR,
  1182. $ FATAL, NOUT, .FALSE. )
  1183. END IF
  1184. END IF
  1185. ERRMAX = MAX( ERRMAX, ERR )
  1186. * If got really bad answer, report and
  1187. * return.
  1188. IF( FATAL )
  1189. $ GO TO 150
  1190. END IF
  1191. *
  1192. 80 CONTINUE
  1193. *
  1194. 90 CONTINUE
  1195. *
  1196. 100 CONTINUE
  1197. *
  1198. 110 CONTINUE
  1199. *
  1200. 120 CONTINUE
  1201. *
  1202. 130 CONTINUE
  1203. *
  1204. 140 CONTINUE
  1205. *
  1206. * Report result.
  1207. *
  1208. IF( ERRMAX.LT.THRESH )THEN
  1209. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1210. ELSE
  1211. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1212. END IF
  1213. GO TO 160
  1214. *
  1215. 150 CONTINUE
  1216. WRITE( NOUT, FMT = 9996 )SNAME
  1217. WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
  1218. $ N, ALPHA, LDA, LDB
  1219. *
  1220. 160 CONTINUE
  1221. RETURN
  1222. *
  1223. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1224. $ 'S)' )
  1225. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1226. $ 'ANGED INCORRECTLY *******' )
  1227. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1228. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1229. $ ' - SUSPECT *******' )
  1230. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1231. 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
  1232. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
  1233. $ ' .' )
  1234. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1235. $ '******' )
  1236. *
  1237. * End of CCHK3.
  1238. *
  1239. END
  1240. SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  1241. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  1242. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  1243. *
  1244. * Tests CHERK and CSYRK.
  1245. *
  1246. * Auxiliary routine for test program for Level 3 Blas.
  1247. *
  1248. * -- Written on 8-February-1989.
  1249. * Jack Dongarra, Argonne National Laboratory.
  1250. * Iain Duff, AERE Harwell.
  1251. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1252. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1253. *
  1254. * .. Parameters ..
  1255. COMPLEX ZERO
  1256. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  1257. REAL RONE, RZERO
  1258. PARAMETER ( RONE = 1.0, RZERO = 0.0 )
  1259. * .. Scalar Arguments ..
  1260. REAL EPS, THRESH
  1261. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  1262. LOGICAL FATAL, REWI, TRACE
  1263. CHARACTER*6 SNAME
  1264. * .. Array Arguments ..
  1265. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  1266. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  1267. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  1268. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  1269. $ CS( NMAX*NMAX ), CT( NMAX )
  1270. REAL G( NMAX )
  1271. INTEGER IDIM( NIDIM )
  1272. * .. Local Scalars ..
  1273. COMPLEX ALPHA, ALS, BETA, BETS
  1274. REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
  1275. INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
  1276. $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
  1277. $ NARGS, NC, NS
  1278. LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
  1279. CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
  1280. CHARACTER*2 ICHT, ICHU
  1281. * .. Local Arrays ..
  1282. LOGICAL ISAME( 13 )
  1283. * .. External Functions ..
  1284. LOGICAL LCE, LCERES
  1285. EXTERNAL LCE, LCERES
  1286. * .. External Subroutines ..
  1287. EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
  1288. * .. Intrinsic Functions ..
  1289. INTRINSIC CMPLX, MAX, REAL
  1290. * .. Scalars in Common ..
  1291. INTEGER INFOT, NOUTC
  1292. LOGICAL LERR, OK
  1293. * .. Common blocks ..
  1294. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1295. * .. Data statements ..
  1296. DATA ICHT/'NC'/, ICHU/'UL'/
  1297. * .. Executable Statements ..
  1298. CONJ = SNAME( 2: 3 ).EQ.'HE'
  1299. *
  1300. NARGS = 10
  1301. NC = 0
  1302. RESET = .TRUE.
  1303. ERRMAX = RZERO
  1304. RALS = RONE
  1305. RBETS = RONE
  1306. *
  1307. DO 100 IN = 1, NIDIM
  1308. N = IDIM( IN )
  1309. * Set LDC to 1 more than minimum value if room.
  1310. LDC = N
  1311. IF( LDC.LT.NMAX )
  1312. $ LDC = LDC + 1
  1313. * Skip tests if not enough room.
  1314. IF( LDC.GT.NMAX )
  1315. $ GO TO 100
  1316. LCC = LDC*N
  1317. *
  1318. DO 90 IK = 1, NIDIM
  1319. K = IDIM( IK )
  1320. *
  1321. DO 80 ICT = 1, 2
  1322. TRANS = ICHT( ICT: ICT )
  1323. TRAN = TRANS.EQ.'C'
  1324. IF( TRAN.AND..NOT.CONJ )
  1325. $ TRANS = 'T'
  1326. IF( TRAN )THEN
  1327. MA = K
  1328. NA = N
  1329. ELSE
  1330. MA = N
  1331. NA = K
  1332. END IF
  1333. * Set LDA to 1 more than minimum value if room.
  1334. LDA = MA
  1335. IF( LDA.LT.NMAX )
  1336. $ LDA = LDA + 1
  1337. * Skip tests if not enough room.
  1338. IF( LDA.GT.NMAX )
  1339. $ GO TO 80
  1340. LAA = LDA*NA
  1341. *
  1342. * Generate the matrix A.
  1343. *
  1344. CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
  1345. $ RESET, ZERO )
  1346. *
  1347. DO 70 ICU = 1, 2
  1348. UPLO = ICHU( ICU: ICU )
  1349. UPPER = UPLO.EQ.'U'
  1350. *
  1351. DO 60 IA = 1, NALF
  1352. ALPHA = ALF( IA )
  1353. IF( CONJ )THEN
  1354. RALPHA = REAL( ALPHA )
  1355. ALPHA = CMPLX( RALPHA, RZERO )
  1356. END IF
  1357. *
  1358. DO 50 IB = 1, NBET
  1359. BETA = BET( IB )
  1360. IF( CONJ )THEN
  1361. RBETA = REAL( BETA )
  1362. BETA = CMPLX( RBETA, RZERO )
  1363. END IF
  1364. NULL = N.LE.0
  1365. IF( CONJ )
  1366. $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
  1367. $ RZERO ).AND.RBETA.EQ.RONE )
  1368. *
  1369. * Generate the matrix C.
  1370. *
  1371. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
  1372. $ NMAX, CC, LDC, RESET, ZERO )
  1373. *
  1374. NC = NC + 1
  1375. *
  1376. * Save every datum before calling the subroutine.
  1377. *
  1378. UPLOS = UPLO
  1379. TRANSS = TRANS
  1380. NS = N
  1381. KS = K
  1382. IF( CONJ )THEN
  1383. RALS = RALPHA
  1384. ELSE
  1385. ALS = ALPHA
  1386. END IF
  1387. DO 10 I = 1, LAA
  1388. AS( I ) = AA( I )
  1389. 10 CONTINUE
  1390. LDAS = LDA
  1391. IF( CONJ )THEN
  1392. RBETS = RBETA
  1393. ELSE
  1394. BETS = BETA
  1395. END IF
  1396. DO 20 I = 1, LCC
  1397. CS( I ) = CC( I )
  1398. 20 CONTINUE
  1399. LDCS = LDC
  1400. *
  1401. * Call the subroutine.
  1402. *
  1403. IF( CONJ )THEN
  1404. IF( TRACE )
  1405. $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
  1406. $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
  1407. IF( REWI )
  1408. $ REWIND NTRA
  1409. CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
  1410. $ LDA, RBETA, CC, LDC )
  1411. ELSE
  1412. IF( TRACE )
  1413. $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
  1414. $ TRANS, N, K, ALPHA, LDA, BETA, LDC
  1415. IF( REWI )
  1416. $ REWIND NTRA
  1417. CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
  1418. $ LDA, BETA, CC, LDC )
  1419. END IF
  1420. *
  1421. * Check if error-exit was taken incorrectly.
  1422. *
  1423. IF( .NOT.OK )THEN
  1424. WRITE( NOUT, FMT = 9992 )
  1425. FATAL = .TRUE.
  1426. GO TO 120
  1427. END IF
  1428. *
  1429. * See what data changed inside subroutines.
  1430. *
  1431. ISAME( 1 ) = UPLOS.EQ.UPLO
  1432. ISAME( 2 ) = TRANSS.EQ.TRANS
  1433. ISAME( 3 ) = NS.EQ.N
  1434. ISAME( 4 ) = KS.EQ.K
  1435. IF( CONJ )THEN
  1436. ISAME( 5 ) = RALS.EQ.RALPHA
  1437. ELSE
  1438. ISAME( 5 ) = ALS.EQ.ALPHA
  1439. END IF
  1440. ISAME( 6 ) = LCE( AS, AA, LAA )
  1441. ISAME( 7 ) = LDAS.EQ.LDA
  1442. IF( CONJ )THEN
  1443. ISAME( 8 ) = RBETS.EQ.RBETA
  1444. ELSE
  1445. ISAME( 8 ) = BETS.EQ.BETA
  1446. END IF
  1447. IF( NULL )THEN
  1448. ISAME( 9 ) = LCE( CS, CC, LCC )
  1449. ELSE
  1450. ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
  1451. $ N, CS, CC, LDC )
  1452. END IF
  1453. ISAME( 10 ) = LDCS.EQ.LDC
  1454. *
  1455. * If data was incorrectly changed, report and
  1456. * return.
  1457. *
  1458. SAME = .TRUE.
  1459. DO 30 I = 1, NARGS
  1460. SAME = SAME.AND.ISAME( I )
  1461. IF( .NOT.ISAME( I ) )
  1462. $ WRITE( NOUT, FMT = 9998 )I
  1463. 30 CONTINUE
  1464. IF( .NOT.SAME )THEN
  1465. FATAL = .TRUE.
  1466. GO TO 120
  1467. END IF
  1468. *
  1469. IF( .NOT.NULL )THEN
  1470. *
  1471. * Check the result column by column.
  1472. *
  1473. IF( CONJ )THEN
  1474. TRANST = 'C'
  1475. ELSE
  1476. TRANST = 'T'
  1477. END IF
  1478. JC = 1
  1479. DO 40 J = 1, N
  1480. IF( UPPER )THEN
  1481. JJ = 1
  1482. LJ = J
  1483. ELSE
  1484. JJ = J
  1485. LJ = N - J + 1
  1486. END IF
  1487. IF( TRAN )THEN
  1488. CALL CMMCH( TRANST, 'N', LJ, 1, K,
  1489. $ ALPHA, A( 1, JJ ), NMAX,
  1490. $ A( 1, J ), NMAX, BETA,
  1491. $ C( JJ, J ), NMAX, CT, G,
  1492. $ CC( JC ), LDC, EPS, ERR,
  1493. $ FATAL, NOUT, .TRUE. )
  1494. ELSE
  1495. CALL CMMCH( 'N', TRANST, LJ, 1, K,
  1496. $ ALPHA, A( JJ, 1 ), NMAX,
  1497. $ A( J, 1 ), NMAX, BETA,
  1498. $ C( JJ, J ), NMAX, CT, G,
  1499. $ CC( JC ), LDC, EPS, ERR,
  1500. $ FATAL, NOUT, .TRUE. )
  1501. END IF
  1502. IF( UPPER )THEN
  1503. JC = JC + LDC
  1504. ELSE
  1505. JC = JC + LDC + 1
  1506. END IF
  1507. ERRMAX = MAX( ERRMAX, ERR )
  1508. * If got really bad answer, report and
  1509. * return.
  1510. IF( FATAL )
  1511. $ GO TO 110
  1512. 40 CONTINUE
  1513. END IF
  1514. *
  1515. 50 CONTINUE
  1516. *
  1517. 60 CONTINUE
  1518. *
  1519. 70 CONTINUE
  1520. *
  1521. 80 CONTINUE
  1522. *
  1523. 90 CONTINUE
  1524. *
  1525. 100 CONTINUE
  1526. *
  1527. * Report result.
  1528. *
  1529. IF( ERRMAX.LT.THRESH )THEN
  1530. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1531. ELSE
  1532. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1533. END IF
  1534. GO TO 130
  1535. *
  1536. 110 CONTINUE
  1537. IF( N.GT.1 )
  1538. $ WRITE( NOUT, FMT = 9995 )J
  1539. *
  1540. 120 CONTINUE
  1541. WRITE( NOUT, FMT = 9996 )SNAME
  1542. IF( CONJ )THEN
  1543. WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
  1544. $ LDA, RBETA, LDC
  1545. ELSE
  1546. WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1547. $ LDA, BETA, LDC
  1548. END IF
  1549. *
  1550. 130 CONTINUE
  1551. RETURN
  1552. *
  1553. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1554. $ 'S)' )
  1555. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1556. $ 'ANGED INCORRECTLY *******' )
  1557. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1558. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1559. $ ' - SUSPECT *******' )
  1560. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1561. 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  1562. 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1563. $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
  1564. $ ' .' )
  1565. 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1566. $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
  1567. $ '), C,', I3, ') .' )
  1568. 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1569. $ '******' )
  1570. *
  1571. * End of CCHK4.
  1572. *
  1573. END
  1574. SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  1575. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  1576. $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
  1577. *
  1578. * Tests CHER2K and CSYR2K.
  1579. *
  1580. * Auxiliary routine for test program for Level 3 Blas.
  1581. *
  1582. * -- Written on 8-February-1989.
  1583. * Jack Dongarra, Argonne National Laboratory.
  1584. * Iain Duff, AERE Harwell.
  1585. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1586. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1587. *
  1588. * .. Parameters ..
  1589. COMPLEX ZERO, ONE
  1590. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  1591. REAL RONE, RZERO
  1592. PARAMETER ( RONE = 1.0, RZERO = 0.0 )
  1593. * .. Scalar Arguments ..
  1594. REAL EPS, THRESH
  1595. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  1596. LOGICAL FATAL, REWI, TRACE
  1597. CHARACTER*6 SNAME
  1598. * .. Array Arguments ..
  1599. COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
  1600. $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
  1601. $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
  1602. $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
  1603. $ W( 2*NMAX )
  1604. REAL G( NMAX )
  1605. INTEGER IDIM( NIDIM )
  1606. * .. Local Scalars ..
  1607. COMPLEX ALPHA, ALS, BETA, BETS
  1608. REAL ERR, ERRMAX, RBETA, RBETS
  1609. INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
  1610. $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
  1611. $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
  1612. LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
  1613. CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
  1614. CHARACTER*2 ICHT, ICHU
  1615. * .. Local Arrays ..
  1616. LOGICAL ISAME( 13 )
  1617. * .. External Functions ..
  1618. LOGICAL LCE, LCERES
  1619. EXTERNAL LCE, LCERES
  1620. * .. External Subroutines ..
  1621. EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
  1622. * .. Intrinsic Functions ..
  1623. INTRINSIC CMPLX, CONJG, MAX, REAL
  1624. * .. Scalars in Common ..
  1625. INTEGER INFOT, NOUTC
  1626. LOGICAL LERR, OK
  1627. * .. Common blocks ..
  1628. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1629. * .. Data statements ..
  1630. DATA ICHT/'NC'/, ICHU/'UL'/
  1631. * .. Executable Statements ..
  1632. CONJ = SNAME( 2: 3 ).EQ.'HE'
  1633. *
  1634. NARGS = 12
  1635. NC = 0
  1636. RESET = .TRUE.
  1637. ERRMAX = RZERO
  1638. *
  1639. DO 130 IN = 1, NIDIM
  1640. N = IDIM( IN )
  1641. * Set LDC to 1 more than minimum value if room.
  1642. LDC = N
  1643. IF( LDC.LT.NMAX )
  1644. $ LDC = LDC + 1
  1645. * Skip tests if not enough room.
  1646. IF( LDC.GT.NMAX )
  1647. $ GO TO 130
  1648. LCC = LDC*N
  1649. *
  1650. DO 120 IK = 1, NIDIM
  1651. K = IDIM( IK )
  1652. *
  1653. DO 110 ICT = 1, 2
  1654. TRANS = ICHT( ICT: ICT )
  1655. TRAN = TRANS.EQ.'C'
  1656. IF( TRAN.AND..NOT.CONJ )
  1657. $ TRANS = 'T'
  1658. IF( TRAN )THEN
  1659. MA = K
  1660. NA = N
  1661. ELSE
  1662. MA = N
  1663. NA = K
  1664. END IF
  1665. * Set LDA to 1 more than minimum value if room.
  1666. LDA = MA
  1667. IF( LDA.LT.NMAX )
  1668. $ LDA = LDA + 1
  1669. * Skip tests if not enough room.
  1670. IF( LDA.GT.NMAX )
  1671. $ GO TO 110
  1672. LAA = LDA*NA
  1673. *
  1674. * Generate the matrix A.
  1675. *
  1676. IF( TRAN )THEN
  1677. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
  1678. $ LDA, RESET, ZERO )
  1679. ELSE
  1680. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
  1681. $ RESET, ZERO )
  1682. END IF
  1683. *
  1684. * Generate the matrix B.
  1685. *
  1686. LDB = LDA
  1687. LBB = LAA
  1688. IF( TRAN )THEN
  1689. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
  1690. $ 2*NMAX, BB, LDB, RESET, ZERO )
  1691. ELSE
  1692. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
  1693. $ NMAX, BB, LDB, RESET, ZERO )
  1694. END IF
  1695. *
  1696. DO 100 ICU = 1, 2
  1697. UPLO = ICHU( ICU: ICU )
  1698. UPPER = UPLO.EQ.'U'
  1699. *
  1700. DO 90 IA = 1, NALF
  1701. ALPHA = ALF( IA )
  1702. *
  1703. DO 80 IB = 1, NBET
  1704. BETA = BET( IB )
  1705. IF( CONJ )THEN
  1706. RBETA = REAL( BETA )
  1707. BETA = CMPLX( RBETA, RZERO )
  1708. END IF
  1709. NULL = N.LE.0
  1710. IF( CONJ )
  1711. $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
  1712. $ ZERO ).AND.RBETA.EQ.RONE )
  1713. *
  1714. * Generate the matrix C.
  1715. *
  1716. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
  1717. $ NMAX, CC, LDC, RESET, ZERO )
  1718. *
  1719. NC = NC + 1
  1720. *
  1721. * Save every datum before calling the subroutine.
  1722. *
  1723. UPLOS = UPLO
  1724. TRANSS = TRANS
  1725. NS = N
  1726. KS = K
  1727. ALS = ALPHA
  1728. DO 10 I = 1, LAA
  1729. AS( I ) = AA( I )
  1730. 10 CONTINUE
  1731. LDAS = LDA
  1732. DO 20 I = 1, LBB
  1733. BS( I ) = BB( I )
  1734. 20 CONTINUE
  1735. LDBS = LDB
  1736. IF( CONJ )THEN
  1737. RBETS = RBETA
  1738. ELSE
  1739. BETS = BETA
  1740. END IF
  1741. DO 30 I = 1, LCC
  1742. CS( I ) = CC( I )
  1743. 30 CONTINUE
  1744. LDCS = LDC
  1745. *
  1746. * Call the subroutine.
  1747. *
  1748. IF( CONJ )THEN
  1749. IF( TRACE )
  1750. $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
  1751. $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
  1752. IF( REWI )
  1753. $ REWIND NTRA
  1754. CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
  1755. $ LDA, BB, LDB, RBETA, CC, LDC )
  1756. ELSE
  1757. IF( TRACE )
  1758. $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
  1759. $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
  1760. IF( REWI )
  1761. $ REWIND NTRA
  1762. CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
  1763. $ LDA, BB, LDB, BETA, CC, LDC )
  1764. END IF
  1765. *
  1766. * Check if error-exit was taken incorrectly.
  1767. *
  1768. IF( .NOT.OK )THEN
  1769. WRITE( NOUT, FMT = 9992 )
  1770. FATAL = .TRUE.
  1771. GO TO 150
  1772. END IF
  1773. *
  1774. * See what data changed inside subroutines.
  1775. *
  1776. ISAME( 1 ) = UPLOS.EQ.UPLO
  1777. ISAME( 2 ) = TRANSS.EQ.TRANS
  1778. ISAME( 3 ) = NS.EQ.N
  1779. ISAME( 4 ) = KS.EQ.K
  1780. ISAME( 5 ) = ALS.EQ.ALPHA
  1781. ISAME( 6 ) = LCE( AS, AA, LAA )
  1782. ISAME( 7 ) = LDAS.EQ.LDA
  1783. ISAME( 8 ) = LCE( BS, BB, LBB )
  1784. ISAME( 9 ) = LDBS.EQ.LDB
  1785. IF( CONJ )THEN
  1786. ISAME( 10 ) = RBETS.EQ.RBETA
  1787. ELSE
  1788. ISAME( 10 ) = BETS.EQ.BETA
  1789. END IF
  1790. IF( NULL )THEN
  1791. ISAME( 11 ) = LCE( CS, CC, LCC )
  1792. ELSE
  1793. ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
  1794. $ CC, LDC )
  1795. END IF
  1796. ISAME( 12 ) = LDCS.EQ.LDC
  1797. *
  1798. * If data was incorrectly changed, report and
  1799. * return.
  1800. *
  1801. SAME = .TRUE.
  1802. DO 40 I = 1, NARGS
  1803. SAME = SAME.AND.ISAME( I )
  1804. IF( .NOT.ISAME( I ) )
  1805. $ WRITE( NOUT, FMT = 9998 )I
  1806. 40 CONTINUE
  1807. IF( .NOT.SAME )THEN
  1808. FATAL = .TRUE.
  1809. GO TO 150
  1810. END IF
  1811. *
  1812. IF( .NOT.NULL )THEN
  1813. *
  1814. * Check the result column by column.
  1815. *
  1816. IF( CONJ )THEN
  1817. TRANST = 'C'
  1818. ELSE
  1819. TRANST = 'T'
  1820. END IF
  1821. JJAB = 1
  1822. JC = 1
  1823. DO 70 J = 1, N
  1824. IF( UPPER )THEN
  1825. JJ = 1
  1826. LJ = J
  1827. ELSE
  1828. JJ = J
  1829. LJ = N - J + 1
  1830. END IF
  1831. IF( TRAN )THEN
  1832. DO 50 I = 1, K
  1833. W( I ) = ALPHA*AB( ( J - 1 )*2*
  1834. $ NMAX + K + I )
  1835. IF( CONJ )THEN
  1836. W( K + I ) = CONJG( ALPHA )*
  1837. $ AB( ( J - 1 )*2*
  1838. $ NMAX + I )
  1839. ELSE
  1840. W( K + I ) = ALPHA*
  1841. $ AB( ( J - 1 )*2*
  1842. $ NMAX + I )
  1843. END IF
  1844. 50 CONTINUE
  1845. CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
  1846. $ ONE, AB( JJAB ), 2*NMAX, W,
  1847. $ 2*NMAX, BETA, C( JJ, J ),
  1848. $ NMAX, CT, G, CC( JC ), LDC,
  1849. $ EPS, ERR, FATAL, NOUT,
  1850. $ .TRUE. )
  1851. ELSE
  1852. DO 60 I = 1, K
  1853. IF( CONJ )THEN
  1854. W( I ) = ALPHA*CONJG( AB( ( K +
  1855. $ I - 1 )*NMAX + J ) )
  1856. W( K + I ) = CONJG( ALPHA*
  1857. $ AB( ( I - 1 )*NMAX +
  1858. $ J ) )
  1859. ELSE
  1860. W( I ) = ALPHA*AB( ( K + I - 1 )*
  1861. $ NMAX + J )
  1862. W( K + I ) = ALPHA*
  1863. $ AB( ( I - 1 )*NMAX +
  1864. $ J )
  1865. END IF
  1866. 60 CONTINUE
  1867. CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
  1868. $ AB( JJ ), NMAX, W, 2*NMAX,
  1869. $ BETA, C( JJ, J ), NMAX, CT,
  1870. $ G, CC( JC ), LDC, EPS, ERR,
  1871. $ FATAL, NOUT, .TRUE. )
  1872. END IF
  1873. IF( UPPER )THEN
  1874. JC = JC + LDC
  1875. ELSE
  1876. JC = JC + LDC + 1
  1877. IF( TRAN )
  1878. $ JJAB = JJAB + 2*NMAX
  1879. END IF
  1880. ERRMAX = MAX( ERRMAX, ERR )
  1881. * If got really bad answer, report and
  1882. * return.
  1883. IF( FATAL )
  1884. $ GO TO 140
  1885. 70 CONTINUE
  1886. END IF
  1887. *
  1888. 80 CONTINUE
  1889. *
  1890. 90 CONTINUE
  1891. *
  1892. 100 CONTINUE
  1893. *
  1894. 110 CONTINUE
  1895. *
  1896. 120 CONTINUE
  1897. *
  1898. 130 CONTINUE
  1899. *
  1900. * Report result.
  1901. *
  1902. IF( ERRMAX.LT.THRESH )THEN
  1903. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1904. ELSE
  1905. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1906. END IF
  1907. GO TO 160
  1908. *
  1909. 140 CONTINUE
  1910. IF( N.GT.1 )
  1911. $ WRITE( NOUT, FMT = 9995 )J
  1912. *
  1913. 150 CONTINUE
  1914. WRITE( NOUT, FMT = 9996 )SNAME
  1915. IF( CONJ )THEN
  1916. WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1917. $ LDA, LDB, RBETA, LDC
  1918. ELSE
  1919. WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1920. $ LDA, LDB, BETA, LDC
  1921. END IF
  1922. *
  1923. 160 CONTINUE
  1924. RETURN
  1925. *
  1926. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1927. $ 'S)' )
  1928. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1929. $ 'ANGED INCORRECTLY *******' )
  1930. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1931. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1932. $ ' - SUSPECT *******' )
  1933. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1934. 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  1935. 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1936. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
  1937. $ ', C,', I3, ') .' )
  1938. 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1939. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
  1940. $ ',', F4.1, '), C,', I3, ') .' )
  1941. 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1942. $ '******' )
  1943. *
  1944. * End of CCHK5.
  1945. *
  1946. END
  1947. SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
  1948. *
  1949. * Tests the error exits from the Level 3 Blas.
  1950. * Requires a special version of the error-handling routine XERBLA.
  1951. * ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
  1952. *
  1953. * Auxiliary routine for test program for Level 3 Blas.
  1954. *
  1955. * -- Written on 8-February-1989.
  1956. * Jack Dongarra, Argonne National Laboratory.
  1957. * Iain Duff, AERE Harwell.
  1958. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1959. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1960. *
  1961. * .. Scalar Arguments ..
  1962. INTEGER ISNUM, NOUT
  1963. CHARACTER*6 SRNAMT
  1964. * .. Scalars in Common ..
  1965. INTEGER INFOT, NOUTC
  1966. LOGICAL LERR, OK
  1967. * .. Local Scalars ..
  1968. COMPLEX ALPHA, BETA
  1969. REAL RALPHA, RBETA
  1970. * .. Local Arrays ..
  1971. COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
  1972. * .. External Subroutines ..
  1973. EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
  1974. $ CSYR2K, CSYRK, CTRMM, CTRSM
  1975. * .. Common blocks ..
  1976. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1977. * .. Executable Statements ..
  1978. * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
  1979. * if anything is wrong.
  1980. OK = .TRUE.
  1981. * LERR is set to .TRUE. by the special version of XERBLA each time
  1982. * it is called, and is then tested and re-set by CHKXER.
  1983. LERR = .FALSE.
  1984. GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
  1985. $ 90 )ISNUM
  1986. 10 INFOT = 1
  1987. CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  1988. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  1989. INFOT = 1
  1990. CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  1991. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  1992. INFOT = 1
  1993. CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  1994. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  1995. INFOT = 2
  1996. CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  1997. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  1998. INFOT = 2
  1999. CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2000. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2001. INFOT = 2
  2002. CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2003. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2004. INFOT = 3
  2005. CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2006. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2007. INFOT = 3
  2008. CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2009. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2010. INFOT = 3
  2011. CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2012. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2013. INFOT = 3
  2014. CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2015. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2016. INFOT = 3
  2017. CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2018. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2019. INFOT = 3
  2020. CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2021. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2022. INFOT = 3
  2023. CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2024. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2025. INFOT = 3
  2026. CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2027. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2028. INFOT = 3
  2029. CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2030. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2031. INFOT = 4
  2032. CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2033. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2034. INFOT = 4
  2035. CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2036. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2037. INFOT = 4
  2038. CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2039. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2040. INFOT = 4
  2041. CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2042. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2043. INFOT = 4
  2044. CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2045. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2046. INFOT = 4
  2047. CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2048. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2049. INFOT = 4
  2050. CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2051. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2052. INFOT = 4
  2053. CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2054. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2055. INFOT = 4
  2056. CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2057. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2058. INFOT = 5
  2059. CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2060. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2061. INFOT = 5
  2062. CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2063. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2064. INFOT = 5
  2065. CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2066. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2067. INFOT = 5
  2068. CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2069. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2070. INFOT = 5
  2071. CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2072. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2073. INFOT = 5
  2074. CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2075. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2076. INFOT = 5
  2077. CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2078. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2079. INFOT = 5
  2080. CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2081. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2082. INFOT = 5
  2083. CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2084. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2085. INFOT = 8
  2086. CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2087. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2088. INFOT = 8
  2089. CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2090. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2091. INFOT = 8
  2092. CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2093. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2094. INFOT = 8
  2095. CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2096. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2097. INFOT = 8
  2098. CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2099. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2100. INFOT = 8
  2101. CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2102. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2103. INFOT = 8
  2104. CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2105. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2106. INFOT = 8
  2107. CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2108. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2109. INFOT = 8
  2110. CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2111. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2112. INFOT = 10
  2113. CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2114. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2115. INFOT = 10
  2116. CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2117. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2118. INFOT = 10
  2119. CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2120. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2121. INFOT = 10
  2122. CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2123. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2124. INFOT = 10
  2125. CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2126. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2127. INFOT = 10
  2128. CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2129. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2130. INFOT = 10
  2131. CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2132. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2133. INFOT = 10
  2134. CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2135. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2136. INFOT = 10
  2137. CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2138. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2139. INFOT = 13
  2140. CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2141. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2142. INFOT = 13
  2143. CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2144. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2145. INFOT = 13
  2146. CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2147. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2148. INFOT = 13
  2149. CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2150. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2151. INFOT = 13
  2152. CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2153. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2154. INFOT = 13
  2155. CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2156. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2157. INFOT = 13
  2158. CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2159. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2160. INFOT = 13
  2161. CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2162. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2163. INFOT = 13
  2164. CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2165. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2166. GO TO 100
  2167. 20 INFOT = 1
  2168. CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2169. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2170. INFOT = 2
  2171. CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2172. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2173. INFOT = 3
  2174. CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2175. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2176. INFOT = 3
  2177. CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2178. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2179. INFOT = 3
  2180. CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2181. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2182. INFOT = 3
  2183. CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2184. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2185. INFOT = 4
  2186. CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2187. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2188. INFOT = 4
  2189. CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2190. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2191. INFOT = 4
  2192. CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2193. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2194. INFOT = 4
  2195. CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2196. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2197. INFOT = 7
  2198. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2199. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2200. INFOT = 7
  2201. CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2202. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2203. INFOT = 7
  2204. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2205. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2206. INFOT = 7
  2207. CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2208. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2209. INFOT = 9
  2210. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2211. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2212. INFOT = 9
  2213. CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2214. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2215. INFOT = 9
  2216. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2217. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2218. INFOT = 9
  2219. CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2220. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2221. INFOT = 12
  2222. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2223. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2224. INFOT = 12
  2225. CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2226. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2227. INFOT = 12
  2228. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2229. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2230. INFOT = 12
  2231. CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2232. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2233. GO TO 100
  2234. 30 INFOT = 1
  2235. CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2236. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2237. INFOT = 2
  2238. CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2239. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2240. INFOT = 3
  2241. CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2242. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2243. INFOT = 3
  2244. CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2245. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2246. INFOT = 3
  2247. CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2248. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2249. INFOT = 3
  2250. CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2251. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2252. INFOT = 4
  2253. CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2254. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2255. INFOT = 4
  2256. CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2257. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2258. INFOT = 4
  2259. CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2260. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2261. INFOT = 4
  2262. CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2263. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2264. INFOT = 7
  2265. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2266. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2267. INFOT = 7
  2268. CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2269. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2270. INFOT = 7
  2271. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2272. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2273. INFOT = 7
  2274. CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2275. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2276. INFOT = 9
  2277. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2278. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2279. INFOT = 9
  2280. CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2281. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2282. INFOT = 9
  2283. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2284. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2285. INFOT = 9
  2286. CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2287. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2288. INFOT = 12
  2289. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2290. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2291. INFOT = 12
  2292. CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2293. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2294. INFOT = 12
  2295. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2296. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2297. INFOT = 12
  2298. CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2299. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2300. GO TO 100
  2301. 40 INFOT = 1
  2302. CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2303. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2304. INFOT = 2
  2305. CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2306. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2307. INFOT = 3
  2308. CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2309. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2310. INFOT = 4
  2311. CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
  2312. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2313. INFOT = 5
  2314. CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2315. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2316. INFOT = 5
  2317. CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2318. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2319. INFOT = 5
  2320. CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2321. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2322. INFOT = 5
  2323. CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2324. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2325. INFOT = 5
  2326. CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2327. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2328. INFOT = 5
  2329. CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2330. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2331. INFOT = 5
  2332. CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2333. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2334. INFOT = 5
  2335. CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2336. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2337. INFOT = 5
  2338. CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2339. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2340. INFOT = 5
  2341. CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2342. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2343. INFOT = 5
  2344. CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2345. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2346. INFOT = 5
  2347. CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2348. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2349. INFOT = 6
  2350. CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2351. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2352. INFOT = 6
  2353. CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2354. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2355. INFOT = 6
  2356. CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2357. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2358. INFOT = 6
  2359. CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2360. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2361. INFOT = 6
  2362. CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2363. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2364. INFOT = 6
  2365. CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2366. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2367. INFOT = 6
  2368. CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2369. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2370. INFOT = 6
  2371. CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2372. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2373. INFOT = 6
  2374. CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2375. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2376. INFOT = 6
  2377. CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2378. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2379. INFOT = 6
  2380. CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2381. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2382. INFOT = 6
  2383. CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2384. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2385. INFOT = 9
  2386. CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2387. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2388. INFOT = 9
  2389. CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2390. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2391. INFOT = 9
  2392. CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2393. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2394. INFOT = 9
  2395. CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2396. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2397. INFOT = 9
  2398. CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2399. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2400. INFOT = 9
  2401. CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2402. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2403. INFOT = 9
  2404. CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2405. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2406. INFOT = 9
  2407. CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2408. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2409. INFOT = 9
  2410. CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2411. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2412. INFOT = 9
  2413. CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2414. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2415. INFOT = 9
  2416. CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2417. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2418. INFOT = 9
  2419. CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2420. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2421. INFOT = 11
  2422. CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2423. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2424. INFOT = 11
  2425. CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2426. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2427. INFOT = 11
  2428. CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2429. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2430. INFOT = 11
  2431. CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2432. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2433. INFOT = 11
  2434. CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2435. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2436. INFOT = 11
  2437. CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2438. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2439. INFOT = 11
  2440. CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2441. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2442. INFOT = 11
  2443. CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2444. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2445. INFOT = 11
  2446. CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2447. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2448. INFOT = 11
  2449. CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2450. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2451. INFOT = 11
  2452. CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2453. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2454. INFOT = 11
  2455. CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2456. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2457. GO TO 100
  2458. 50 INFOT = 1
  2459. CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2460. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2461. INFOT = 2
  2462. CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2463. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2464. INFOT = 3
  2465. CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2466. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2467. INFOT = 4
  2468. CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
  2469. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2470. INFOT = 5
  2471. CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2472. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2473. INFOT = 5
  2474. CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2475. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2476. INFOT = 5
  2477. CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2478. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2479. INFOT = 5
  2480. CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2481. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2482. INFOT = 5
  2483. CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2484. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2485. INFOT = 5
  2486. CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2487. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2488. INFOT = 5
  2489. CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2490. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2491. INFOT = 5
  2492. CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2493. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2494. INFOT = 5
  2495. CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2496. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2497. INFOT = 5
  2498. CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2499. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2500. INFOT = 5
  2501. CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2502. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2503. INFOT = 5
  2504. CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2505. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2506. INFOT = 6
  2507. CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2508. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2509. INFOT = 6
  2510. CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2511. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2512. INFOT = 6
  2513. CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2514. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2515. INFOT = 6
  2516. CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2517. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2518. INFOT = 6
  2519. CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2520. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2521. INFOT = 6
  2522. CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2523. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2524. INFOT = 6
  2525. CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2526. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2527. INFOT = 6
  2528. CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2529. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2530. INFOT = 6
  2531. CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2532. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2533. INFOT = 6
  2534. CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2535. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2536. INFOT = 6
  2537. CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2538. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2539. INFOT = 6
  2540. CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2541. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2542. INFOT = 9
  2543. CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2544. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2545. INFOT = 9
  2546. CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2547. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2548. INFOT = 9
  2549. CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2550. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2551. INFOT = 9
  2552. CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2553. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2554. INFOT = 9
  2555. CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2556. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2557. INFOT = 9
  2558. CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2559. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2560. INFOT = 9
  2561. CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2562. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2563. INFOT = 9
  2564. CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2565. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2566. INFOT = 9
  2567. CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2568. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2569. INFOT = 9
  2570. CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2571. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2572. INFOT = 9
  2573. CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2574. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2575. INFOT = 9
  2576. CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2577. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2578. INFOT = 11
  2579. CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2580. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2581. INFOT = 11
  2582. CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2583. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2584. INFOT = 11
  2585. CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2586. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2587. INFOT = 11
  2588. CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2589. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2590. INFOT = 11
  2591. CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2592. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2593. INFOT = 11
  2594. CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2595. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2596. INFOT = 11
  2597. CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2598. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2599. INFOT = 11
  2600. CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2601. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2602. INFOT = 11
  2603. CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2604. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2605. INFOT = 11
  2606. CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2607. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2608. INFOT = 11
  2609. CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2610. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2611. INFOT = 11
  2612. CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2613. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2614. GO TO 100
  2615. 60 INFOT = 1
  2616. CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
  2617. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2618. INFOT = 2
  2619. CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
  2620. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2621. INFOT = 3
  2622. CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2623. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2624. INFOT = 3
  2625. CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2626. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2627. INFOT = 3
  2628. CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2629. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2630. INFOT = 3
  2631. CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2632. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2633. INFOT = 4
  2634. CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2635. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2636. INFOT = 4
  2637. CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2638. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2639. INFOT = 4
  2640. CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2641. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2642. INFOT = 4
  2643. CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2644. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2645. INFOT = 7
  2646. CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
  2647. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2648. INFOT = 7
  2649. CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
  2650. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2651. INFOT = 7
  2652. CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
  2653. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2654. INFOT = 7
  2655. CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
  2656. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2657. INFOT = 10
  2658. CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
  2659. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2660. INFOT = 10
  2661. CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
  2662. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2663. INFOT = 10
  2664. CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
  2665. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2666. INFOT = 10
  2667. CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
  2668. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2669. GO TO 100
  2670. 70 INFOT = 1
  2671. CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
  2672. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2673. INFOT = 2
  2674. CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
  2675. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2676. INFOT = 3
  2677. CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2678. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2679. INFOT = 3
  2680. CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2681. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2682. INFOT = 3
  2683. CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2684. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2685. INFOT = 3
  2686. CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2687. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2688. INFOT = 4
  2689. CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2690. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2691. INFOT = 4
  2692. CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2693. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2694. INFOT = 4
  2695. CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2696. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2697. INFOT = 4
  2698. CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2699. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2700. INFOT = 7
  2701. CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
  2702. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2703. INFOT = 7
  2704. CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
  2705. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2706. INFOT = 7
  2707. CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
  2708. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2709. INFOT = 7
  2710. CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
  2711. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2712. INFOT = 10
  2713. CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
  2714. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2715. INFOT = 10
  2716. CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
  2717. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2718. INFOT = 10
  2719. CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
  2720. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2721. INFOT = 10
  2722. CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
  2723. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2724. GO TO 100
  2725. 80 INFOT = 1
  2726. CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2727. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2728. INFOT = 2
  2729. CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2730. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2731. INFOT = 3
  2732. CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2733. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2734. INFOT = 3
  2735. CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2736. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2737. INFOT = 3
  2738. CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2739. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2740. INFOT = 3
  2741. CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2742. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2743. INFOT = 4
  2744. CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2745. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2746. INFOT = 4
  2747. CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2748. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2749. INFOT = 4
  2750. CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2751. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2752. INFOT = 4
  2753. CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2754. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2755. INFOT = 7
  2756. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
  2757. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2758. INFOT = 7
  2759. CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2760. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2761. INFOT = 7
  2762. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
  2763. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2764. INFOT = 7
  2765. CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2766. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2767. INFOT = 9
  2768. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
  2769. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2770. INFOT = 9
  2771. CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
  2772. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2773. INFOT = 9
  2774. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
  2775. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2776. INFOT = 9
  2777. CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
  2778. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2779. INFOT = 12
  2780. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
  2781. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2782. INFOT = 12
  2783. CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2784. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2785. INFOT = 12
  2786. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
  2787. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2788. INFOT = 12
  2789. CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2790. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2791. GO TO 100
  2792. 90 INFOT = 1
  2793. CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2794. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2795. INFOT = 2
  2796. CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2797. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2798. INFOT = 3
  2799. CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2800. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2801. INFOT = 3
  2802. CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2803. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2804. INFOT = 3
  2805. CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2806. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2807. INFOT = 3
  2808. CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2809. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2810. INFOT = 4
  2811. CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2812. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2813. INFOT = 4
  2814. CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2815. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2816. INFOT = 4
  2817. CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2818. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2819. INFOT = 4
  2820. CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2821. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2822. INFOT = 7
  2823. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2824. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2825. INFOT = 7
  2826. CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2827. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2828. INFOT = 7
  2829. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2830. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2831. INFOT = 7
  2832. CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2833. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2834. INFOT = 9
  2835. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2836. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2837. INFOT = 9
  2838. CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2839. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2840. INFOT = 9
  2841. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2842. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2843. INFOT = 9
  2844. CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2845. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2846. INFOT = 12
  2847. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2848. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2849. INFOT = 12
  2850. CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2851. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2852. INFOT = 12
  2853. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2854. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2855. INFOT = 12
  2856. CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2857. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2858. *
  2859. 100 IF( OK )THEN
  2860. WRITE( NOUT, FMT = 9999 )SRNAMT
  2861. ELSE
  2862. WRITE( NOUT, FMT = 9998 )SRNAMT
  2863. END IF
  2864. RETURN
  2865. *
  2866. 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
  2867. 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
  2868. $ '**' )
  2869. *
  2870. * End of CCHKE.
  2871. *
  2872. END
  2873. SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
  2874. $ TRANSL )
  2875. *
  2876. * Generates values for an M by N matrix A.
  2877. * Stores the values in the array AA in the data structure required
  2878. * by the routine, with unwanted elements set to rogue value.
  2879. *
  2880. * TYPE is 'GE', 'HE', 'SY' or 'TR'.
  2881. *
  2882. * Auxiliary routine for test program for Level 3 Blas.
  2883. *
  2884. * -- Written on 8-February-1989.
  2885. * Jack Dongarra, Argonne National Laboratory.
  2886. * Iain Duff, AERE Harwell.
  2887. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  2888. * Sven Hammarling, Numerical Algorithms Group Ltd.
  2889. *
  2890. * .. Parameters ..
  2891. COMPLEX ZERO, ONE
  2892. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  2893. COMPLEX ROGUE
  2894. PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
  2895. REAL RZERO
  2896. PARAMETER ( RZERO = 0.0 )
  2897. REAL RROGUE
  2898. PARAMETER ( RROGUE = -1.0E10 )
  2899. * .. Scalar Arguments ..
  2900. COMPLEX TRANSL
  2901. INTEGER LDA, M, N, NMAX
  2902. LOGICAL RESET
  2903. CHARACTER*1 DIAG, UPLO
  2904. CHARACTER*2 TYPE
  2905. * .. Array Arguments ..
  2906. COMPLEX A( NMAX, * ), AA( * )
  2907. * .. Local Scalars ..
  2908. INTEGER I, IBEG, IEND, J, JJ
  2909. LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
  2910. * .. External Functions ..
  2911. COMPLEX CBEG
  2912. EXTERNAL CBEG
  2913. * .. Intrinsic Functions ..
  2914. INTRINSIC CMPLX, CONJG, REAL
  2915. * .. Executable Statements ..
  2916. GEN = TYPE.EQ.'GE'
  2917. HER = TYPE.EQ.'HE'
  2918. SYM = TYPE.EQ.'SY'
  2919. TRI = TYPE.EQ.'TR'
  2920. UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
  2921. LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
  2922. UNIT = TRI.AND.DIAG.EQ.'U'
  2923. *
  2924. * Generate data in array A.
  2925. *
  2926. DO 20 J = 1, N
  2927. DO 10 I = 1, M
  2928. IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
  2929. $ THEN
  2930. A( I, J ) = CBEG( RESET ) + TRANSL
  2931. IF( I.NE.J )THEN
  2932. * Set some elements to zero
  2933. IF( N.GT.3.AND.J.EQ.N/2 )
  2934. $ A( I, J ) = ZERO
  2935. IF( HER )THEN
  2936. A( J, I ) = CONJG( A( I, J ) )
  2937. ELSE IF( SYM )THEN
  2938. A( J, I ) = A( I, J )
  2939. ELSE IF( TRI )THEN
  2940. A( J, I ) = ZERO
  2941. END IF
  2942. END IF
  2943. END IF
  2944. 10 CONTINUE
  2945. IF( HER )
  2946. $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
  2947. IF( TRI )
  2948. $ A( J, J ) = A( J, J ) + ONE
  2949. IF( UNIT )
  2950. $ A( J, J ) = ONE
  2951. 20 CONTINUE
  2952. *
  2953. * Store elements in array AS in data structure required by routine.
  2954. *
  2955. IF( TYPE.EQ.'GE' )THEN
  2956. DO 50 J = 1, N
  2957. DO 30 I = 1, M
  2958. AA( I + ( J - 1 )*LDA ) = A( I, J )
  2959. 30 CONTINUE
  2960. DO 40 I = M + 1, LDA
  2961. AA( I + ( J - 1 )*LDA ) = ROGUE
  2962. 40 CONTINUE
  2963. 50 CONTINUE
  2964. ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
  2965. DO 90 J = 1, N
  2966. IF( UPPER )THEN
  2967. IBEG = 1
  2968. IF( UNIT )THEN
  2969. IEND = J - 1
  2970. ELSE
  2971. IEND = J
  2972. END IF
  2973. ELSE
  2974. IF( UNIT )THEN
  2975. IBEG = J + 1
  2976. ELSE
  2977. IBEG = J
  2978. END IF
  2979. IEND = N
  2980. END IF
  2981. DO 60 I = 1, IBEG - 1
  2982. AA( I + ( J - 1 )*LDA ) = ROGUE
  2983. 60 CONTINUE
  2984. DO 70 I = IBEG, IEND
  2985. AA( I + ( J - 1 )*LDA ) = A( I, J )
  2986. 70 CONTINUE
  2987. DO 80 I = IEND + 1, LDA
  2988. AA( I + ( J - 1 )*LDA ) = ROGUE
  2989. 80 CONTINUE
  2990. IF( HER )THEN
  2991. JJ = J + ( J - 1 )*LDA
  2992. AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
  2993. END IF
  2994. 90 CONTINUE
  2995. END IF
  2996. RETURN
  2997. *
  2998. * End of CMAKE.
  2999. *
  3000. END
  3001. SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
  3002. $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
  3003. $ NOUT, MV )
  3004. *
  3005. * Checks the results of the computational tests.
  3006. *
  3007. * Auxiliary routine for test program for Level 3 Blas.
  3008. *
  3009. * -- Written on 8-February-1989.
  3010. * Jack Dongarra, Argonne National Laboratory.
  3011. * Iain Duff, AERE Harwell.
  3012. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3013. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3014. *
  3015. * .. Parameters ..
  3016. COMPLEX ZERO
  3017. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  3018. REAL RZERO, RONE
  3019. PARAMETER ( RZERO = 0.0, RONE = 1.0 )
  3020. * .. Scalar Arguments ..
  3021. COMPLEX ALPHA, BETA
  3022. REAL EPS, ERR
  3023. INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
  3024. LOGICAL FATAL, MV
  3025. CHARACTER*1 TRANSA, TRANSB
  3026. * .. Array Arguments ..
  3027. COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
  3028. $ CC( LDCC, * ), CT( * )
  3029. REAL G( * )
  3030. * .. Local Scalars ..
  3031. COMPLEX CL
  3032. REAL ERRI
  3033. INTEGER I, J, K
  3034. LOGICAL CTRANA, CTRANB, TRANA, TRANB
  3035. * .. Intrinsic Functions ..
  3036. INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
  3037. * .. Statement Functions ..
  3038. REAL ABS1
  3039. * .. Statement Function definitions ..
  3040. ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
  3041. * .. Executable Statements ..
  3042. TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
  3043. TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
  3044. CTRANA = TRANSA.EQ.'C'
  3045. CTRANB = TRANSB.EQ.'C'
  3046. *
  3047. * Compute expected result, one column at a time, in CT using data
  3048. * in A, B and C.
  3049. * Compute gauges in G.
  3050. *
  3051. DO 220 J = 1, N
  3052. *
  3053. DO 10 I = 1, M
  3054. CT( I ) = ZERO
  3055. G( I ) = RZERO
  3056. 10 CONTINUE
  3057. IF( .NOT.TRANA.AND..NOT.TRANB )THEN
  3058. DO 30 K = 1, KK
  3059. DO 20 I = 1, M
  3060. CT( I ) = CT( I ) + A( I, K )*B( K, J )
  3061. G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
  3062. 20 CONTINUE
  3063. 30 CONTINUE
  3064. ELSE IF( TRANA.AND..NOT.TRANB )THEN
  3065. IF( CTRANA )THEN
  3066. DO 50 K = 1, KK
  3067. DO 40 I = 1, M
  3068. CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
  3069. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3070. $ ABS1( B( K, J ) )
  3071. 40 CONTINUE
  3072. 50 CONTINUE
  3073. ELSE
  3074. DO 70 K = 1, KK
  3075. DO 60 I = 1, M
  3076. CT( I ) = CT( I ) + A( K, I )*B( K, J )
  3077. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3078. $ ABS1( B( K, J ) )
  3079. 60 CONTINUE
  3080. 70 CONTINUE
  3081. END IF
  3082. ELSE IF( .NOT.TRANA.AND.TRANB )THEN
  3083. IF( CTRANB )THEN
  3084. DO 90 K = 1, KK
  3085. DO 80 I = 1, M
  3086. CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
  3087. G( I ) = G( I ) + ABS1( A( I, K ) )*
  3088. $ ABS1( B( J, K ) )
  3089. 80 CONTINUE
  3090. 90 CONTINUE
  3091. ELSE
  3092. DO 110 K = 1, KK
  3093. DO 100 I = 1, M
  3094. CT( I ) = CT( I ) + A( I, K )*B( J, K )
  3095. G( I ) = G( I ) + ABS1( A( I, K ) )*
  3096. $ ABS1( B( J, K ) )
  3097. 100 CONTINUE
  3098. 110 CONTINUE
  3099. END IF
  3100. ELSE IF( TRANA.AND.TRANB )THEN
  3101. IF( CTRANA )THEN
  3102. IF( CTRANB )THEN
  3103. DO 130 K = 1, KK
  3104. DO 120 I = 1, M
  3105. CT( I ) = CT( I ) + CONJG( A( K, I ) )*
  3106. $ CONJG( B( J, K ) )
  3107. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3108. $ ABS1( B( J, K ) )
  3109. 120 CONTINUE
  3110. 130 CONTINUE
  3111. ELSE
  3112. DO 150 K = 1, KK
  3113. DO 140 I = 1, M
  3114. CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
  3115. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3116. $ ABS1( B( J, K ) )
  3117. 140 CONTINUE
  3118. 150 CONTINUE
  3119. END IF
  3120. ELSE
  3121. IF( CTRANB )THEN
  3122. DO 170 K = 1, KK
  3123. DO 160 I = 1, M
  3124. CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
  3125. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3126. $ ABS1( B( J, K ) )
  3127. 160 CONTINUE
  3128. 170 CONTINUE
  3129. ELSE
  3130. DO 190 K = 1, KK
  3131. DO 180 I = 1, M
  3132. CT( I ) = CT( I ) + A( K, I )*B( J, K )
  3133. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3134. $ ABS1( B( J, K ) )
  3135. 180 CONTINUE
  3136. 190 CONTINUE
  3137. END IF
  3138. END IF
  3139. END IF
  3140. DO 200 I = 1, M
  3141. CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
  3142. G( I ) = ABS1( ALPHA )*G( I ) +
  3143. $ ABS1( BETA )*ABS1( C( I, J ) )
  3144. 200 CONTINUE
  3145. *
  3146. * Compute the error ratio for this result.
  3147. *
  3148. ERR = ZERO
  3149. DO 210 I = 1, M
  3150. ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
  3151. IF( G( I ).NE.RZERO )
  3152. $ ERRI = ERRI/G( I )
  3153. ERR = MAX( ERR, ERRI )
  3154. IF( ERR*SQRT( EPS ).GE.RONE )
  3155. $ GO TO 230
  3156. 210 CONTINUE
  3157. *
  3158. 220 CONTINUE
  3159. *
  3160. * If the loop completes, all results are at least half accurate.
  3161. GO TO 250
  3162. *
  3163. * Report fatal error.
  3164. *
  3165. 230 FATAL = .TRUE.
  3166. WRITE( NOUT, FMT = 9999 )
  3167. DO 240 I = 1, M
  3168. IF( MV )THEN
  3169. WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
  3170. ELSE
  3171. WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
  3172. END IF
  3173. 240 CONTINUE
  3174. IF( N.GT.1 )
  3175. $ WRITE( NOUT, FMT = 9997 )J
  3176. *
  3177. 250 CONTINUE
  3178. RETURN
  3179. *
  3180. 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
  3181. $ 'F ACCURATE *******', /' EXPECTED RE',
  3182. $ 'SULT COMPUTED RESULT' )
  3183. 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
  3184. 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  3185. *
  3186. * End of CMMCH.
  3187. *
  3188. END
  3189. LOGICAL FUNCTION LCE( RI, RJ, LR )
  3190. *
  3191. * Tests if two arrays are identical.
  3192. *
  3193. * Auxiliary routine for test program for Level 3 Blas.
  3194. *
  3195. * -- Written on 8-February-1989.
  3196. * Jack Dongarra, Argonne National Laboratory.
  3197. * Iain Duff, AERE Harwell.
  3198. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3199. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3200. *
  3201. * .. Scalar Arguments ..
  3202. INTEGER LR
  3203. * .. Array Arguments ..
  3204. COMPLEX RI( * ), RJ( * )
  3205. * .. Local Scalars ..
  3206. INTEGER I
  3207. * .. Executable Statements ..
  3208. DO 10 I = 1, LR
  3209. IF( RI( I ).NE.RJ( I ) )
  3210. $ GO TO 20
  3211. 10 CONTINUE
  3212. LCE = .TRUE.
  3213. GO TO 30
  3214. 20 CONTINUE
  3215. LCE = .FALSE.
  3216. 30 RETURN
  3217. *
  3218. * End of LCE.
  3219. *
  3220. END
  3221. LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
  3222. *
  3223. * Tests if selected elements in two arrays are equal.
  3224. *
  3225. * TYPE is 'GE' or 'HE' or 'SY'.
  3226. *
  3227. * Auxiliary routine for test program for Level 3 Blas.
  3228. *
  3229. * -- Written on 8-February-1989.
  3230. * Jack Dongarra, Argonne National Laboratory.
  3231. * Iain Duff, AERE Harwell.
  3232. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3233. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3234. *
  3235. * .. Scalar Arguments ..
  3236. INTEGER LDA, M, N
  3237. CHARACTER*1 UPLO
  3238. CHARACTER*2 TYPE
  3239. * .. Array Arguments ..
  3240. COMPLEX AA( LDA, * ), AS( LDA, * )
  3241. * .. Local Scalars ..
  3242. INTEGER I, IBEG, IEND, J
  3243. LOGICAL UPPER
  3244. * .. Executable Statements ..
  3245. UPPER = UPLO.EQ.'U'
  3246. IF( TYPE.EQ.'GE' )THEN
  3247. DO 20 J = 1, N
  3248. DO 10 I = M + 1, LDA
  3249. IF( AA( I, J ).NE.AS( I, J ) )
  3250. $ GO TO 70
  3251. 10 CONTINUE
  3252. 20 CONTINUE
  3253. ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
  3254. DO 50 J = 1, N
  3255. IF( UPPER )THEN
  3256. IBEG = 1
  3257. IEND = J
  3258. ELSE
  3259. IBEG = J
  3260. IEND = N
  3261. END IF
  3262. DO 30 I = 1, IBEG - 1
  3263. IF( AA( I, J ).NE.AS( I, J ) )
  3264. $ GO TO 70
  3265. 30 CONTINUE
  3266. DO 40 I = IEND + 1, LDA
  3267. IF( AA( I, J ).NE.AS( I, J ) )
  3268. $ GO TO 70
  3269. 40 CONTINUE
  3270. 50 CONTINUE
  3271. END IF
  3272. *
  3273. 60 CONTINUE
  3274. LCERES = .TRUE.
  3275. GO TO 80
  3276. 70 CONTINUE
  3277. LCERES = .FALSE.
  3278. 80 RETURN
  3279. *
  3280. * End of LCERES.
  3281. *
  3282. END
  3283. COMPLEX FUNCTION CBEG( RESET )
  3284. *
  3285. * Generates complex numbers as pairs of random numbers uniformly
  3286. * distributed between -0.5 and 0.5.
  3287. *
  3288. * Auxiliary routine for test program for Level 3 Blas.
  3289. *
  3290. * -- Written on 8-February-1989.
  3291. * Jack Dongarra, Argonne National Laboratory.
  3292. * Iain Duff, AERE Harwell.
  3293. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3294. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3295. *
  3296. * .. Scalar Arguments ..
  3297. LOGICAL RESET
  3298. * .. Local Scalars ..
  3299. INTEGER I, IC, J, MI, MJ
  3300. * .. Save statement ..
  3301. SAVE I, IC, J, MI, MJ
  3302. * .. Intrinsic Functions ..
  3303. INTRINSIC CMPLX
  3304. * .. Executable Statements ..
  3305. IF( RESET )THEN
  3306. * Initialize local variables.
  3307. MI = 891
  3308. MJ = 457
  3309. I = 7
  3310. J = 7
  3311. IC = 0
  3312. RESET = .FALSE.
  3313. END IF
  3314. *
  3315. * The sequence of values of I or J is bounded between 1 and 999.
  3316. * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
  3317. * If initial I or J = 4 or 8, the period will be 25.
  3318. * If initial I or J = 5, the period will be 10.
  3319. * IC is used to break up the period by skipping 1 value of I or J
  3320. * in 6.
  3321. *
  3322. IC = IC + 1
  3323. 10 I = I*MI
  3324. J = J*MJ
  3325. I = I - 1000*( I/1000 )
  3326. J = J - 1000*( J/1000 )
  3327. IF( IC.GE.5 )THEN
  3328. IC = 0
  3329. GO TO 10
  3330. END IF
  3331. CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
  3332. RETURN
  3333. *
  3334. * End of CBEG.
  3335. *
  3336. END
  3337. REAL FUNCTION SDIFF( X, Y )
  3338. *
  3339. * Auxiliary routine for test program for Level 3 Blas.
  3340. *
  3341. * -- Written on 8-February-1989.
  3342. * Jack Dongarra, Argonne National Laboratory.
  3343. * Iain Duff, AERE Harwell.
  3344. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3345. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3346. *
  3347. * .. Scalar Arguments ..
  3348. REAL X, Y
  3349. * .. Executable Statements ..
  3350. SDIFF = X - Y
  3351. RETURN
  3352. *
  3353. * End of SDIFF.
  3354. *
  3355. END
  3356. SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  3357. *
  3358. * Tests whether XERBLA has detected an error when it should.
  3359. *
  3360. * Auxiliary routine for test program for Level 3 Blas.
  3361. *
  3362. * -- Written on 8-February-1989.
  3363. * Jack Dongarra, Argonne National Laboratory.
  3364. * Iain Duff, AERE Harwell.
  3365. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3366. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3367. *
  3368. * .. Scalar Arguments ..
  3369. INTEGER INFOT, NOUT
  3370. LOGICAL LERR, OK
  3371. CHARACTER*6 SRNAMT
  3372. * .. Executable Statements ..
  3373. IF( .NOT.LERR )THEN
  3374. WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
  3375. OK = .FALSE.
  3376. END IF
  3377. LERR = .FALSE.
  3378. RETURN
  3379. *
  3380. 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
  3381. $ 'ETECTED BY ', A6, ' *****' )
  3382. *
  3383. * End of CHKXER.
  3384. *
  3385. END
  3386. SUBROUTINE XERBLA( SRNAME, INFO )
  3387. *
  3388. * This is a special version of XERBLA to be used only as part of
  3389. * the test program for testing error exits from the Level 3 BLAS
  3390. * routines.
  3391. *
  3392. * XERBLA is an error handler for the Level 3 BLAS routines.
  3393. *
  3394. * It is called by the Level 3 BLAS routines if an input parameter is
  3395. * invalid.
  3396. *
  3397. * Auxiliary routine for test program for Level 3 Blas.
  3398. *
  3399. * -- Written on 8-February-1989.
  3400. * Jack Dongarra, Argonne National Laboratory.
  3401. * Iain Duff, AERE Harwell.
  3402. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3403. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3404. *
  3405. * .. Scalar Arguments ..
  3406. INTEGER INFO
  3407. CHARACTER*6 SRNAME
  3408. * .. Scalars in Common ..
  3409. INTEGER INFOT, NOUT
  3410. LOGICAL LERR, OK
  3411. CHARACTER*6 SRNAMT
  3412. * .. Common blocks ..
  3413. COMMON /INFOC/INFOT, NOUT, OK, LERR
  3414. COMMON /SRNAMC/SRNAMT
  3415. * .. Executable Statements ..
  3416. LERR = .TRUE.
  3417. IF( INFO.NE.INFOT )THEN
  3418. IF( INFOT.NE.0 )THEN
  3419. WRITE( NOUT, FMT = 9999 )INFO, INFOT
  3420. ELSE
  3421. WRITE( NOUT, FMT = 9997 )INFO
  3422. END IF
  3423. OK = .FALSE.
  3424. END IF
  3425. IF( SRNAME.NE.SRNAMT )THEN
  3426. WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
  3427. OK = .FALSE.
  3428. END IF
  3429. RETURN
  3430. *
  3431. 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
  3432. $ ' OF ', I2, ' *******' )
  3433. 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
  3434. $ 'AD OF ', A6, ' *******' )
  3435. 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,
  3436. $ ' *******' )
  3437. *
  3438. * End of XERBLA
  3439. *
  3440. END