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_zblat2.f 105 kB

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