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

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