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

c_cblat2.f 105 kB

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