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

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