mkl_blas.f90 92 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380
  1. !===============================================================================
  2. ! Copyright 2005-2022 Intel Corporation.
  3. !
  4. ! This software and the related documents are Intel copyrighted materials, and
  5. ! your use of them is governed by the express license under which they were
  6. ! provided to you (License). Unless the License provides otherwise, you may not
  7. ! use, modify, copy, publish, distribute, disclose or transmit this software or
  8. ! the related documents without Intel's prior written permission.
  9. !
  10. ! This software and the related documents are provided as is, with no express
  11. ! or implied warranties, other than those that are expressly stated in the
  12. ! License.
  13. !===============================================================================
  14. ! Content:
  15. ! F95 interface for BLAS routines
  16. !*******************************************************************************
  17. ! This file was generated automatically!
  18. !*******************************************************************************
  19. MODULE F95_PRECISION
  20. INTEGER, PARAMETER :: SP = KIND(1.0E0)
  21. INTEGER, PARAMETER :: DP = KIND(1.0D0)
  22. END MODULE F95_PRECISION
  23. MODULE BLAS95
  24. INTERFACE ASUM
  25. PURE FUNCTION SASUM_F95(X)
  26. ! Fortran77 call:
  27. ! SASUM(N,X,INCX)
  28. USE F95_PRECISION, ONLY: WP => SP
  29. REAL(WP) :: SASUM_F95
  30. REAL(WP), INTENT(IN) :: X(:)
  31. END FUNCTION SASUM_F95
  32. PURE FUNCTION SCASUM_F95(X)
  33. ! Fortran77 call:
  34. ! SCASUM(N,X,INCX)
  35. USE F95_PRECISION, ONLY: WP => SP
  36. REAL(WP) :: SCASUM_F95
  37. COMPLEX(WP), INTENT(IN) :: X(:)
  38. END FUNCTION SCASUM_F95
  39. PURE FUNCTION DASUM_F95(X)
  40. ! Fortran77 call:
  41. ! DASUM(N,X,INCX)
  42. USE F95_PRECISION, ONLY: WP => DP
  43. REAL(WP) :: DASUM_F95
  44. REAL(WP), INTENT(IN) :: X(:)
  45. END FUNCTION DASUM_F95
  46. PURE FUNCTION DZASUM_F95(X)
  47. ! Fortran77 call:
  48. ! DZASUM(N,X,INCX)
  49. USE F95_PRECISION, ONLY: WP => DP
  50. REAL(WP) :: DZASUM_F95
  51. COMPLEX(WP), INTENT(IN) :: X(:)
  52. END FUNCTION DZASUM_F95
  53. END INTERFACE ASUM
  54. INTERFACE AXPY
  55. ! Default A=1
  56. PURE SUBROUTINE SAXPY_F95(X,Y,A)
  57. ! Fortran77 call:
  58. ! SAXPY(N,A,X,INCX,Y,INCY)
  59. USE F95_PRECISION, ONLY: WP => SP
  60. REAL(WP), INTENT(IN), OPTIONAL :: A
  61. REAL(WP), INTENT(IN) :: X(:)
  62. REAL(WP), INTENT(INOUT) :: Y(:)
  63. END SUBROUTINE SAXPY_F95
  64. PURE SUBROUTINE DAXPY_F95(X,Y,A)
  65. ! Fortran77 call:
  66. ! DAXPY(N,A,X,INCX,Y,INCY)
  67. USE F95_PRECISION, ONLY: WP => DP
  68. REAL(WP), INTENT(IN), OPTIONAL :: A
  69. REAL(WP), INTENT(IN) :: X(:)
  70. REAL(WP), INTENT(INOUT) :: Y(:)
  71. END SUBROUTINE DAXPY_F95
  72. PURE SUBROUTINE CAXPY_F95(X,Y,A)
  73. ! Fortran77 call:
  74. ! CAXPY(N,A,X,INCX,Y,INCY)
  75. USE F95_PRECISION, ONLY: WP => SP
  76. COMPLEX(WP), INTENT(IN), OPTIONAL :: A
  77. COMPLEX(WP), INTENT(IN) :: X(:)
  78. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  79. END SUBROUTINE CAXPY_F95
  80. PURE SUBROUTINE ZAXPY_F95(X,Y,A)
  81. ! Fortran77 call:
  82. ! ZAXPY(N,A,X,INCX,Y,INCY)
  83. USE F95_PRECISION, ONLY: WP => DP
  84. COMPLEX(WP), INTENT(IN), OPTIONAL :: A
  85. COMPLEX(WP), INTENT(IN) :: X(:)
  86. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  87. END SUBROUTINE ZAXPY_F95
  88. END INTERFACE AXPY
  89. INTERFACE COPY
  90. PURE SUBROUTINE SCOPY_F95(X,Y)
  91. ! Fortran77 call:
  92. ! SCOPY(N,X,INCX,Y,INCY)
  93. USE F95_PRECISION, ONLY: WP => SP
  94. REAL(WP), INTENT(IN) :: X(:)
  95. REAL(WP), INTENT(INOUT) :: Y(:)
  96. END SUBROUTINE SCOPY_F95
  97. PURE SUBROUTINE DCOPY_F95(X,Y)
  98. ! Fortran77 call:
  99. ! DCOPY(N,X,INCX,Y,INCY)
  100. USE F95_PRECISION, ONLY: WP => DP
  101. REAL(WP), INTENT(IN) :: X(:)
  102. REAL(WP), INTENT(INOUT) :: Y(:)
  103. END SUBROUTINE DCOPY_F95
  104. PURE SUBROUTINE CCOPY_F95(X,Y)
  105. ! Fortran77 call:
  106. ! CCOPY(N,X,INCX,Y,INCY)
  107. USE F95_PRECISION, ONLY: WP => SP
  108. COMPLEX(WP), INTENT(IN) :: X(:)
  109. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  110. END SUBROUTINE CCOPY_F95
  111. PURE SUBROUTINE ZCOPY_F95(X,Y)
  112. ! Fortran77 call:
  113. ! ZCOPY(N,X,INCX,Y,INCY)
  114. USE F95_PRECISION, ONLY: WP => DP
  115. COMPLEX(WP), INTENT(IN) :: X(:)
  116. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  117. END SUBROUTINE ZCOPY_F95
  118. END INTERFACE COPY
  119. INTERFACE DOT
  120. PURE FUNCTION SDOT_F95(X,Y)
  121. ! Fortran77 call:
  122. ! SDOT(N,X,INCX,Y,INCY)
  123. USE F95_PRECISION, ONLY: WP => SP
  124. REAL(WP) :: SDOT_F95
  125. REAL(WP), INTENT(IN) :: X(:)
  126. REAL(WP), INTENT(IN) :: Y(:)
  127. END FUNCTION SDOT_F95
  128. PURE FUNCTION DDOT_F95(X,Y)
  129. ! Fortran77 call:
  130. ! DDOT(N,X,INCX,Y,INCY)
  131. USE F95_PRECISION, ONLY: WP => DP
  132. REAL(WP) :: DDOT_F95
  133. REAL(WP), INTENT(IN) :: X(:)
  134. REAL(WP), INTENT(IN) :: Y(:)
  135. END FUNCTION DDOT_F95
  136. END INTERFACE DOT
  137. INTERFACE SDOT
  138. PURE FUNCTION SDSDOT_F95(SX,SY,SB)
  139. ! Fortran77 call:
  140. ! SDSDOT(N,SB,SX,INCX,SY,INCY)
  141. USE F95_PRECISION, ONLY: WP => SP
  142. REAL(WP) :: SDSDOT_F95
  143. REAL(WP), INTENT(IN) :: SB
  144. REAL(WP), INTENT(IN) :: SX(:)
  145. REAL(WP), INTENT(IN) :: SY(:)
  146. END FUNCTION SDSDOT_F95
  147. PURE FUNCTION DSDOT_F95(SX,SY)
  148. ! Fortran77 call:
  149. ! DSDOT(N,SX,INCX,SY,INCY)
  150. USE F95_PRECISION, ONLY: WP => DP, SP
  151. REAL(WP) :: DSDOT_F95
  152. REAL(SP), INTENT(IN) :: SX(:)
  153. REAL(SP), INTENT(IN) :: SY(:)
  154. END FUNCTION DSDOT_F95
  155. END INTERFACE SDOT
  156. INTERFACE DOTC
  157. PURE FUNCTION CDOTC_F95(X,Y)
  158. ! Fortran77 call:
  159. ! CDOTC(N,X,INCX,Y,INCY)
  160. USE F95_PRECISION, ONLY: WP => SP
  161. COMPLEX(WP) :: CDOTC_F95
  162. COMPLEX(WP), INTENT(IN) :: X(:)
  163. COMPLEX(WP), INTENT(IN) :: Y(:)
  164. END FUNCTION CDOTC_F95
  165. PURE FUNCTION ZDOTC_F95(X,Y)
  166. ! Fortran77 call:
  167. ! ZDOTC(N,X,INCX,Y,INCY)
  168. USE F95_PRECISION, ONLY: WP => DP
  169. COMPLEX(WP) :: ZDOTC_F95
  170. COMPLEX(WP), INTENT(IN) :: X(:)
  171. COMPLEX(WP), INTENT(IN) :: Y(:)
  172. END FUNCTION ZDOTC_F95
  173. END INTERFACE DOTC
  174. INTERFACE DOTU
  175. PURE FUNCTION CDOTU_F95(X,Y)
  176. ! Fortran77 call:
  177. ! CDOTU(N,X,INCX,Y,INCY)
  178. USE F95_PRECISION, ONLY: WP => SP
  179. COMPLEX(WP) :: CDOTU_F95
  180. COMPLEX(WP), INTENT(IN) :: X(:)
  181. COMPLEX(WP), INTENT(IN) :: Y(:)
  182. END FUNCTION CDOTU_F95
  183. PURE FUNCTION ZDOTU_F95(X,Y)
  184. ! Fortran77 call:
  185. ! ZDOTU(N,X,INCX,Y,INCY)
  186. USE F95_PRECISION, ONLY: WP => DP
  187. COMPLEX(WP) :: ZDOTU_F95
  188. COMPLEX(WP), INTENT(IN) :: X(:)
  189. COMPLEX(WP), INTENT(IN) :: Y(:)
  190. END FUNCTION ZDOTU_F95
  191. END INTERFACE DOTU
  192. INTERFACE NRM2
  193. PURE FUNCTION SNRM2_F95(X)
  194. ! Fortran77 call:
  195. ! SNRM2(N,X,INCX)
  196. USE F95_PRECISION, ONLY: WP => SP
  197. REAL(WP) :: SNRM2_F95
  198. REAL(WP), INTENT(IN) :: X(:)
  199. END FUNCTION SNRM2_F95
  200. PURE FUNCTION DNRM2_F95(X)
  201. ! Fortran77 call:
  202. ! DNRM2(N,X,INCX)
  203. USE F95_PRECISION, ONLY: WP => DP
  204. REAL(WP) :: DNRM2_F95
  205. REAL(WP), INTENT(IN) :: X(:)
  206. END FUNCTION DNRM2_F95
  207. PURE FUNCTION SCNRM2_F95(X)
  208. ! Fortran77 call:
  209. ! SCNRM2(N,X,INCX)
  210. USE F95_PRECISION, ONLY: WP => SP
  211. REAL(WP) :: SCNRM2_F95
  212. COMPLEX(WP), INTENT(IN) :: X(:)
  213. END FUNCTION SCNRM2_F95
  214. PURE FUNCTION DZNRM2_F95(X)
  215. ! Fortran77 call:
  216. ! DZNRM2(N,X,INCX)
  217. USE F95_PRECISION, ONLY: WP => DP
  218. REAL(WP) :: DZNRM2_F95
  219. COMPLEX(WP), INTENT(IN) :: X(:)
  220. END FUNCTION DZNRM2_F95
  221. END INTERFACE NRM2
  222. INTERFACE ROT
  223. PURE SUBROUTINE SROT_F95(X,Y,C,S)
  224. ! Fortran77 call:
  225. ! SROT(N,X,INCX,Y,INCY,C,S)
  226. USE F95_PRECISION, ONLY: WP => SP
  227. REAL(WP), INTENT(IN) :: C
  228. REAL(WP), INTENT(IN) :: S
  229. REAL(WP), INTENT(INOUT) :: X(:)
  230. REAL(WP), INTENT(INOUT) :: Y(:)
  231. END SUBROUTINE SROT_F95
  232. PURE SUBROUTINE DROT_F95(X,Y,C,S)
  233. ! Fortran77 call:
  234. ! DROT(N,X,INCX,Y,INCY,C,S)
  235. USE F95_PRECISION, ONLY: WP => DP
  236. REAL(WP), INTENT(IN) :: C
  237. REAL(WP), INTENT(IN) :: S
  238. REAL(WP), INTENT(INOUT) :: X(:)
  239. REAL(WP), INTENT(INOUT) :: Y(:)
  240. END SUBROUTINE DROT_F95
  241. PURE SUBROUTINE CSROT_F95(X,Y,C,S)
  242. ! Fortran77 call:
  243. ! CSROT(N,X,INCX,Y,INCY,C,S)
  244. USE F95_PRECISION, ONLY: WP => SP
  245. REAL(WP), INTENT(IN) :: C
  246. REAL(WP), INTENT(IN) :: S
  247. COMPLEX(WP), INTENT(INOUT) :: X(:)
  248. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  249. END SUBROUTINE CSROT_F95
  250. PURE SUBROUTINE ZDROT_F95(X,Y,C,S)
  251. ! Fortran77 call:
  252. ! ZDROT(N,X,INCX,Y,INCY,C,S)
  253. USE F95_PRECISION, ONLY: WP => DP
  254. REAL(WP), INTENT(IN) :: C
  255. REAL(WP), INTENT(IN) :: S
  256. COMPLEX(WP), INTENT(INOUT) :: X(:)
  257. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  258. END SUBROUTINE ZDROT_F95
  259. END INTERFACE ROT
  260. INTERFACE ROTG
  261. PURE SUBROUTINE SROTG_F95(A,B,C,S)
  262. ! Fortran77 call:
  263. ! SROTG(A,B,C,S)
  264. USE F95_PRECISION, ONLY: WP => SP
  265. REAL(WP), INTENT(INOUT) :: A
  266. REAL(WP), INTENT(INOUT) :: B
  267. REAL(WP), INTENT(OUT) :: C
  268. REAL(WP), INTENT(OUT) :: S
  269. END SUBROUTINE SROTG_F95
  270. PURE SUBROUTINE DROTG_F95(A,B,C,S)
  271. ! Fortran77 call:
  272. ! DROTG(A,B,C,S)
  273. USE F95_PRECISION, ONLY: WP => DP
  274. REAL(WP), INTENT(INOUT) :: A
  275. REAL(WP), INTENT(INOUT) :: B
  276. REAL(WP), INTENT(OUT) :: C
  277. REAL(WP), INTENT(OUT) :: S
  278. END SUBROUTINE DROTG_F95
  279. PURE SUBROUTINE CROTG_F95(A,B,C,S)
  280. ! Fortran77 call:
  281. ! CROTG(A,B,C,S)
  282. USE F95_PRECISION, ONLY: WP => SP
  283. COMPLEX(WP), INTENT(INOUT) :: A
  284. COMPLEX(WP), INTENT(INOUT) :: B
  285. REAL(WP), INTENT(OUT) :: C
  286. COMPLEX(WP), INTENT(OUT) :: S
  287. END SUBROUTINE CROTG_F95
  288. PURE SUBROUTINE ZROTG_F95(A,B,C,S)
  289. ! Fortran77 call:
  290. ! ZROTG(A,B,C,S)
  291. USE F95_PRECISION, ONLY: WP => DP
  292. COMPLEX(WP), INTENT(INOUT) :: A
  293. COMPLEX(WP), INTENT(INOUT) :: B
  294. REAL(WP), INTENT(OUT) :: C
  295. COMPLEX(WP), INTENT(OUT) :: S
  296. END SUBROUTINE ZROTG_F95
  297. END INTERFACE ROTG
  298. INTERFACE ROTM
  299. PURE SUBROUTINE SROTM_F95(X,Y,PARAM)
  300. ! Fortran77 call:
  301. ! SROTM(N,X,INCX,Y,INCY,PARAM)
  302. USE F95_PRECISION, ONLY: WP => SP
  303. REAL(WP), INTENT(INOUT) :: X(:)
  304. REAL(WP), INTENT(INOUT) :: Y(:)
  305. REAL(WP), INTENT(IN) :: PARAM(5)
  306. END SUBROUTINE SROTM_F95
  307. PURE SUBROUTINE DROTM_F95(X,Y,PARAM)
  308. ! Fortran77 call:
  309. ! DROTM(N,X,INCX,Y,INCY,PARAM)
  310. USE F95_PRECISION, ONLY: WP => DP
  311. REAL(WP), INTENT(INOUT) :: X(:)
  312. REAL(WP), INTENT(INOUT) :: Y(:)
  313. REAL(WP), INTENT(IN) :: PARAM(5)
  314. END SUBROUTINE DROTM_F95
  315. END INTERFACE ROTM
  316. INTERFACE ROTMG
  317. PURE SUBROUTINE SROTMG_F95(D1,D2,X1,Y1,PARAM)
  318. ! Fortran77 call:
  319. ! SROTMG(D1,D2,X1,Y1,PARAM)
  320. USE F95_PRECISION, ONLY: WP => SP
  321. REAL(WP), INTENT(INOUT) :: D1
  322. REAL(WP), INTENT(INOUT) :: D2
  323. REAL(WP), INTENT(INOUT) :: X1
  324. REAL(WP), INTENT(IN) :: Y1
  325. REAL(WP), INTENT(OUT) :: PARAM(5)
  326. END SUBROUTINE SROTMG_F95
  327. PURE SUBROUTINE DROTMG_F95(D1,D2,X1,Y1,PARAM)
  328. ! Fortran77 call:
  329. ! DROTMG(D1,D2,X1,Y1,PARAM)
  330. USE F95_PRECISION, ONLY: WP => DP
  331. REAL(WP), INTENT(INOUT) :: D1
  332. REAL(WP), INTENT(INOUT) :: D2
  333. REAL(WP), INTENT(INOUT) :: X1
  334. REAL(WP), INTENT(IN) :: Y1
  335. REAL(WP), INTENT(OUT) :: PARAM(5)
  336. END SUBROUTINE DROTMG_F95
  337. END INTERFACE ROTMG
  338. INTERFACE SCAL
  339. PURE SUBROUTINE SSCAL_F95(X,A)
  340. ! Fortran77 call:
  341. ! SSCAL(N,A,X,INCX)
  342. USE F95_PRECISION, ONLY: WP => SP
  343. REAL(WP), INTENT(IN) :: A
  344. REAL(WP), INTENT(INOUT) :: X(:)
  345. END SUBROUTINE SSCAL_F95
  346. PURE SUBROUTINE DSCAL_F95(X,A)
  347. ! Fortran77 call:
  348. ! DSCAL(N,A,X,INCX)
  349. USE F95_PRECISION, ONLY: WP => DP
  350. REAL(WP), INTENT(IN) :: A
  351. REAL(WP), INTENT(INOUT) :: X(:)
  352. END SUBROUTINE DSCAL_F95
  353. PURE SUBROUTINE CSCAL_F95(X,A)
  354. ! Fortran77 call:
  355. ! CSCAL(N,A,X,INCX)
  356. USE F95_PRECISION, ONLY: WP => SP
  357. COMPLEX(WP), INTENT(IN) :: A
  358. COMPLEX(WP), INTENT(INOUT) :: X(:)
  359. END SUBROUTINE CSCAL_F95
  360. PURE SUBROUTINE ZSCAL_F95(X,A)
  361. ! Fortran77 call:
  362. ! ZSCAL(N,A,X,INCX)
  363. USE F95_PRECISION, ONLY: WP => DP
  364. COMPLEX(WP), INTENT(IN) :: A
  365. COMPLEX(WP), INTENT(INOUT) :: X(:)
  366. END SUBROUTINE ZSCAL_F95
  367. PURE SUBROUTINE CSSCAL_F95(X,A)
  368. ! Fortran77 call:
  369. ! CSSCAL(N,A,X,INCX)
  370. USE F95_PRECISION, ONLY: WP => SP
  371. REAL(WP), INTENT(IN) :: A
  372. COMPLEX(WP), INTENT(INOUT) :: X(:)
  373. END SUBROUTINE CSSCAL_F95
  374. PURE SUBROUTINE ZDSCAL_F95(X,A)
  375. ! Fortran77 call:
  376. ! ZDSCAL(N,A,X,INCX)
  377. USE F95_PRECISION, ONLY: WP => DP
  378. REAL(WP), INTENT(IN) :: A
  379. COMPLEX(WP), INTENT(INOUT) :: X(:)
  380. END SUBROUTINE ZDSCAL_F95
  381. END INTERFACE SCAL
  382. INTERFACE SWAP
  383. PURE SUBROUTINE SSWAP_F95(X,Y)
  384. ! Fortran77 call:
  385. ! SSWAP(N,X,INCX,Y,INCY)
  386. USE F95_PRECISION, ONLY: WP => SP
  387. REAL(WP), INTENT(INOUT) :: X(:)
  388. REAL(WP), INTENT(INOUT) :: Y(:)
  389. END SUBROUTINE SSWAP_F95
  390. PURE SUBROUTINE DSWAP_F95(X,Y)
  391. ! Fortran77 call:
  392. ! DSWAP(N,X,INCX,Y,INCY)
  393. USE F95_PRECISION, ONLY: WP => DP
  394. REAL(WP), INTENT(INOUT) :: X(:)
  395. REAL(WP), INTENT(INOUT) :: Y(:)
  396. END SUBROUTINE DSWAP_F95
  397. PURE SUBROUTINE CSWAP_F95(X,Y)
  398. ! Fortran77 call:
  399. ! CSWAP(N,X,INCX,Y,INCY)
  400. USE F95_PRECISION, ONLY: WP => SP
  401. COMPLEX(WP), INTENT(INOUT) :: X(:)
  402. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  403. END SUBROUTINE CSWAP_F95
  404. PURE SUBROUTINE ZSWAP_F95(X,Y)
  405. ! Fortran77 call:
  406. ! ZSWAP(N,X,INCX,Y,INCY)
  407. USE F95_PRECISION, ONLY: WP => DP
  408. COMPLEX(WP), INTENT(INOUT) :: X(:)
  409. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  410. END SUBROUTINE ZSWAP_F95
  411. END INTERFACE SWAP
  412. INTERFACE IAMAX
  413. PURE FUNCTION ISAMAX_F95(X)
  414. ! Fortran77 call:
  415. ! ISAMAX(N,X,INCX)
  416. USE F95_PRECISION, ONLY: WP => SP
  417. INTEGER :: ISAMAX_F95
  418. REAL(WP), INTENT(IN) :: X(:)
  419. END FUNCTION ISAMAX_F95
  420. PURE FUNCTION IDAMAX_F95(X)
  421. ! Fortran77 call:
  422. ! IDAMAX(N,X,INCX)
  423. USE F95_PRECISION, ONLY: WP => DP
  424. INTEGER :: IDAMAX_F95
  425. REAL(WP), INTENT(IN) :: X(:)
  426. END FUNCTION IDAMAX_F95
  427. PURE FUNCTION ICAMAX_F95(X)
  428. ! Fortran77 call:
  429. ! ICAMAX(N,X,INCX)
  430. USE F95_PRECISION, ONLY: WP => SP
  431. INTEGER :: ICAMAX_F95
  432. COMPLEX(WP), INTENT(IN) :: X(:)
  433. END FUNCTION ICAMAX_F95
  434. PURE FUNCTION IZAMAX_F95(X)
  435. ! Fortran77 call:
  436. ! IZAMAX(N,X,INCX)
  437. USE F95_PRECISION, ONLY: WP => DP
  438. INTEGER :: IZAMAX_F95
  439. COMPLEX(WP), INTENT(IN) :: X(:)
  440. END FUNCTION IZAMAX_F95
  441. END INTERFACE IAMAX
  442. INTERFACE IAMIN
  443. PURE FUNCTION ISAMIN_F95(X)
  444. ! Fortran77 call:
  445. ! ISAMIN(N,X,INCX)
  446. USE F95_PRECISION, ONLY: WP => SP
  447. INTEGER :: ISAMIN_F95
  448. REAL(WP), INTENT(IN) :: X(:)
  449. END FUNCTION ISAMIN_F95
  450. PURE FUNCTION IDAMIN_F95(X)
  451. ! Fortran77 call:
  452. ! IDAMIN(N,X,INCX)
  453. USE F95_PRECISION, ONLY: WP => DP
  454. INTEGER :: IDAMIN_F95
  455. REAL(WP), INTENT(IN) :: X(:)
  456. END FUNCTION IDAMIN_F95
  457. PURE FUNCTION ICAMIN_F95(X)
  458. ! Fortran77 call:
  459. ! ICAMIN(N,X,INCX)
  460. USE F95_PRECISION, ONLY: WP => SP
  461. INTEGER :: ICAMIN_F95
  462. COMPLEX(WP), INTENT(IN) :: X(:)
  463. END FUNCTION ICAMIN_F95
  464. PURE FUNCTION IZAMIN_F95(X)
  465. ! Fortran77 call:
  466. ! IZAMIN(N,X,INCX)
  467. USE F95_PRECISION, ONLY: WP => DP
  468. INTEGER :: IZAMIN_F95
  469. COMPLEX(WP), INTENT(IN) :: X(:)
  470. END FUNCTION IZAMIN_F95
  471. END INTERFACE IAMIN
  472. INTERFACE CABS1
  473. PURE FUNCTION SCABS1_F95(C)
  474. ! Fortran77 call:
  475. ! SCABS1(C)
  476. USE F95_PRECISION, ONLY: WP => SP
  477. REAL(WP) :: SCABS1_F95
  478. COMPLEX(WP), INTENT(IN) :: C
  479. END FUNCTION SCABS1_F95
  480. PURE FUNCTION DCABS1_F95(Z)
  481. ! Fortran77 call:
  482. ! DCABS1(Z)
  483. USE F95_PRECISION, ONLY: WP => DP
  484. REAL(WP) :: DCABS1_F95
  485. COMPLEX(WP), INTENT(IN) :: Z
  486. END FUNCTION DCABS1_F95
  487. END INTERFACE CABS1
  488. INTERFACE GBMV
  489. ! TRANS='N','C','T'; default: 'N'
  490. ! Default ALPHA=1
  491. ! Default BETA=0
  492. PURE SUBROUTINE SGBMV_F95(A,X,Y,KL,M,ALPHA,BETA,TRANS)
  493. ! Fortran77 call:
  494. ! SGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  495. USE F95_PRECISION, ONLY: WP => SP
  496. INTEGER, INTENT(IN), OPTIONAL :: KL
  497. INTEGER, INTENT(IN), OPTIONAL :: M
  498. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  499. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  500. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  501. REAL(WP), INTENT(IN) :: A(:,:)
  502. REAL(WP), INTENT(IN) :: X(:)
  503. REAL(WP), INTENT(INOUT) :: Y(:)
  504. END SUBROUTINE SGBMV_F95
  505. PURE SUBROUTINE DGBMV_F95(A,X,Y,KL,M,ALPHA,BETA,TRANS)
  506. ! Fortran77 call:
  507. ! DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  508. USE F95_PRECISION, ONLY: WP => DP
  509. INTEGER, INTENT(IN), OPTIONAL :: KL
  510. INTEGER, INTENT(IN), OPTIONAL :: M
  511. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  512. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  513. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  514. REAL(WP), INTENT(IN) :: A(:,:)
  515. REAL(WP), INTENT(IN) :: X(:)
  516. REAL(WP), INTENT(INOUT) :: Y(:)
  517. END SUBROUTINE DGBMV_F95
  518. PURE SUBROUTINE CGBMV_F95(A,X,Y,KL,M,ALPHA,BETA,TRANS)
  519. ! Fortran77 call:
  520. ! CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  521. USE F95_PRECISION, ONLY: WP => SP
  522. INTEGER, INTENT(IN), OPTIONAL :: KL
  523. INTEGER, INTENT(IN), OPTIONAL :: M
  524. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  525. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  526. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  527. COMPLEX(WP), INTENT(IN) :: A(:,:)
  528. COMPLEX(WP), INTENT(IN) :: X(:)
  529. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  530. END SUBROUTINE CGBMV_F95
  531. PURE SUBROUTINE ZGBMV_F95(A,X,Y,KL,M,ALPHA,BETA,TRANS)
  532. ! Fortran77 call:
  533. ! ZGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  534. USE F95_PRECISION, ONLY: WP => DP
  535. INTEGER, INTENT(IN), OPTIONAL :: KL
  536. INTEGER, INTENT(IN), OPTIONAL :: M
  537. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  538. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  539. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  540. COMPLEX(WP), INTENT(IN) :: A(:,:)
  541. COMPLEX(WP), INTENT(IN) :: X(:)
  542. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  543. END SUBROUTINE ZGBMV_F95
  544. END INTERFACE GBMV
  545. INTERFACE GEMV
  546. ! TRANS='N','C','T'; default: 'N'
  547. ! Default ALPHA=1
  548. ! Default BETA=0
  549. PURE SUBROUTINE SGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  550. ! Fortran77 call:
  551. ! SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  552. USE F95_PRECISION, ONLY: WP => SP
  553. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  554. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  555. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  556. REAL(WP), INTENT(IN) :: A(:,:)
  557. REAL(WP), INTENT(IN) :: X(:)
  558. REAL(WP), INTENT(INOUT) :: Y(:)
  559. END SUBROUTINE SGEMV_F95
  560. PURE SUBROUTINE DGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  561. ! Fortran77 call:
  562. ! DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  563. USE F95_PRECISION, ONLY: WP => DP
  564. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  565. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  566. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  567. REAL(WP), INTENT(IN) :: A(:,:)
  568. REAL(WP), INTENT(IN) :: X(:)
  569. REAL(WP), INTENT(INOUT) :: Y(:)
  570. END SUBROUTINE DGEMV_F95
  571. PURE SUBROUTINE CGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  572. ! Fortran77 call:
  573. ! CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  574. USE F95_PRECISION, ONLY: WP => SP
  575. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  576. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  577. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  578. COMPLEX(WP), INTENT(IN) :: A(:,:)
  579. COMPLEX(WP), INTENT(IN) :: X(:)
  580. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  581. END SUBROUTINE CGEMV_F95
  582. PURE SUBROUTINE ZGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  583. ! Fortran77 call:
  584. ! ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  585. USE F95_PRECISION, ONLY: WP => DP
  586. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  587. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  588. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  589. COMPLEX(WP), INTENT(IN) :: A(:,:)
  590. COMPLEX(WP), INTENT(IN) :: X(:)
  591. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  592. END SUBROUTINE ZGEMV_F95
  593. PURE SUBROUTINE SCGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  594. ! Fortran77 call:
  595. ! SCGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  596. USE F95_PRECISION, ONLY: WP => SP
  597. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  598. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  599. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  600. REAL(WP), INTENT(IN) :: A(:,:)
  601. COMPLEX(WP), INTENT(IN) :: X(:)
  602. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  603. END SUBROUTINE SCGEMV_F95
  604. PURE SUBROUTINE DZGEMV_F95(A,X,Y,ALPHA,BETA,TRANS)
  605. ! Fortran77 call:
  606. ! DZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  607. USE F95_PRECISION, ONLY: WP => DP
  608. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  609. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  610. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  611. REAL(WP), INTENT(IN) :: A(:,:)
  612. COMPLEX(WP), INTENT(IN) :: X(:)
  613. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  614. END SUBROUTINE DZGEMV_F95
  615. END INTERFACE GEMV
  616. INTERFACE GER
  617. ! Default ALPHA=1
  618. PURE SUBROUTINE SGER_F95(A,X,Y,ALPHA)
  619. ! Fortran77 call:
  620. ! SGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  621. USE F95_PRECISION, ONLY: WP => SP
  622. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  623. REAL(WP), INTENT(INOUT) :: A(:,:)
  624. REAL(WP), INTENT(IN) :: X(:)
  625. REAL(WP), INTENT(IN) :: Y(:)
  626. END SUBROUTINE SGER_F95
  627. PURE SUBROUTINE DGER_F95(A,X,Y,ALPHA)
  628. ! Fortran77 call:
  629. ! DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  630. USE F95_PRECISION, ONLY: WP => DP
  631. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  632. REAL(WP), INTENT(INOUT) :: A(:,:)
  633. REAL(WP), INTENT(IN) :: X(:)
  634. REAL(WP), INTENT(IN) :: Y(:)
  635. END SUBROUTINE DGER_F95
  636. END INTERFACE GER
  637. INTERFACE GERC
  638. ! Default ALPHA=1
  639. PURE SUBROUTINE CGERC_F95(A,X,Y,ALPHA)
  640. ! Fortran77 call:
  641. ! CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  642. USE F95_PRECISION, ONLY: WP => SP
  643. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  644. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  645. COMPLEX(WP), INTENT(IN) :: X(:)
  646. COMPLEX(WP), INTENT(IN) :: Y(:)
  647. END SUBROUTINE CGERC_F95
  648. PURE SUBROUTINE ZGERC_F95(A,X,Y,ALPHA)
  649. ! Fortran77 call:
  650. ! ZGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  651. USE F95_PRECISION, ONLY: WP => DP
  652. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  653. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  654. COMPLEX(WP), INTENT(IN) :: X(:)
  655. COMPLEX(WP), INTENT(IN) :: Y(:)
  656. END SUBROUTINE ZGERC_F95
  657. END INTERFACE GERC
  658. INTERFACE GERU
  659. ! Default ALPHA=1
  660. PURE SUBROUTINE CGERU_F95(A,X,Y,ALPHA)
  661. ! Fortran77 call:
  662. ! CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  663. USE F95_PRECISION, ONLY: WP => SP
  664. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  665. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  666. COMPLEX(WP), INTENT(IN) :: X(:)
  667. COMPLEX(WP), INTENT(IN) :: Y(:)
  668. END SUBROUTINE CGERU_F95
  669. PURE SUBROUTINE ZGERU_F95(A,X,Y,ALPHA)
  670. ! Fortran77 call:
  671. ! ZGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  672. USE F95_PRECISION, ONLY: WP => DP
  673. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  674. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  675. COMPLEX(WP), INTENT(IN) :: X(:)
  676. COMPLEX(WP), INTENT(IN) :: Y(:)
  677. END SUBROUTINE ZGERU_F95
  678. END INTERFACE GERU
  679. INTERFACE HBMV
  680. ! UPLO='U','L'; default: 'U'
  681. ! Default ALPHA=1
  682. ! Default BETA=0
  683. PURE SUBROUTINE CHBMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  684. ! Fortran77 call:
  685. ! CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  686. USE F95_PRECISION, ONLY: WP => SP
  687. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  688. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  689. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  690. COMPLEX(WP), INTENT(IN) :: A(:,:)
  691. COMPLEX(WP), INTENT(IN) :: X(:)
  692. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  693. END SUBROUTINE CHBMV_F95
  694. PURE SUBROUTINE ZHBMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  695. ! Fortran77 call:
  696. ! ZHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  697. USE F95_PRECISION, ONLY: WP => DP
  698. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  699. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  700. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  701. COMPLEX(WP), INTENT(IN) :: A(:,:)
  702. COMPLEX(WP), INTENT(IN) :: X(:)
  703. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  704. END SUBROUTINE ZHBMV_F95
  705. END INTERFACE HBMV
  706. INTERFACE HEMV
  707. ! UPLO='U','L'; default: 'U'
  708. ! Default ALPHA=1
  709. ! Default BETA=0
  710. PURE SUBROUTINE CHEMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  711. ! Fortran77 call:
  712. ! CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  713. USE F95_PRECISION, ONLY: WP => SP
  714. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  715. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  716. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  717. COMPLEX(WP), INTENT(IN) :: A(:,:)
  718. COMPLEX(WP), INTENT(IN) :: X(:)
  719. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  720. END SUBROUTINE CHEMV_F95
  721. PURE SUBROUTINE ZHEMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  722. ! Fortran77 call:
  723. ! ZHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  724. USE F95_PRECISION, ONLY: WP => DP
  725. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  726. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  727. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  728. COMPLEX(WP), INTENT(IN) :: A(:,:)
  729. COMPLEX(WP), INTENT(IN) :: X(:)
  730. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  731. END SUBROUTINE ZHEMV_F95
  732. END INTERFACE HEMV
  733. INTERFACE HER
  734. ! UPLO='U','L'; default: 'U'
  735. ! Default ALPHA=1
  736. PURE SUBROUTINE CHER_F95(A,X,UPLO,ALPHA)
  737. ! Fortran77 call:
  738. ! CHER(UPLO,N,ALPHA,X,INCX,A,LDA)
  739. USE F95_PRECISION, ONLY: WP => SP
  740. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  741. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  742. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  743. COMPLEX(WP), INTENT(IN) :: X(:)
  744. END SUBROUTINE CHER_F95
  745. PURE SUBROUTINE ZHER_F95(A,X,UPLO,ALPHA)
  746. ! Fortran77 call:
  747. ! ZHER(UPLO,N,ALPHA,X,INCX,A,LDA)
  748. USE F95_PRECISION, ONLY: WP => DP
  749. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  750. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  751. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  752. COMPLEX(WP), INTENT(IN) :: X(:)
  753. END SUBROUTINE ZHER_F95
  754. END INTERFACE HER
  755. INTERFACE HER2
  756. ! UPLO='U','L'; default: 'U'
  757. ! Default ALPHA=1
  758. PURE SUBROUTINE CHER2_F95(A,X,Y,UPLO,ALPHA)
  759. ! Fortran77 call:
  760. ! CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  761. USE F95_PRECISION, ONLY: WP => SP
  762. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  763. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  764. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  765. COMPLEX(WP), INTENT(IN) :: X(:)
  766. COMPLEX(WP), INTENT(IN) :: Y(:)
  767. END SUBROUTINE CHER2_F95
  768. PURE SUBROUTINE ZHER2_F95(A,X,Y,UPLO,ALPHA)
  769. ! Fortran77 call:
  770. ! ZHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  771. USE F95_PRECISION, ONLY: WP => DP
  772. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  773. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  774. COMPLEX(WP), INTENT(INOUT) :: A(:,:)
  775. COMPLEX(WP), INTENT(IN) :: X(:)
  776. COMPLEX(WP), INTENT(IN) :: Y(:)
  777. END SUBROUTINE ZHER2_F95
  778. END INTERFACE HER2
  779. INTERFACE HPMV
  780. ! UPLO='U','L'; default: 'U'
  781. ! Default ALPHA=1
  782. ! Default BETA=0
  783. PURE SUBROUTINE CHPMV_F95(AP,X,Y,UPLO,ALPHA,BETA)
  784. ! Fortran77 call:
  785. ! CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  786. USE F95_PRECISION, ONLY: WP => SP
  787. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  788. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  789. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  790. COMPLEX(WP), INTENT(IN) :: AP(:)
  791. COMPLEX(WP), INTENT(IN) :: X(:)
  792. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  793. END SUBROUTINE CHPMV_F95
  794. PURE SUBROUTINE ZHPMV_F95(AP,X,Y,UPLO,ALPHA,BETA)
  795. ! Fortran77 call:
  796. ! ZHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  797. USE F95_PRECISION, ONLY: WP => DP
  798. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  799. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  800. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  801. COMPLEX(WP), INTENT(IN) :: AP(:)
  802. COMPLEX(WP), INTENT(IN) :: X(:)
  803. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  804. END SUBROUTINE ZHPMV_F95
  805. END INTERFACE HPMV
  806. INTERFACE HPR
  807. ! UPLO='U','L'; default: 'U'
  808. ! Default ALPHA=1
  809. PURE SUBROUTINE CHPR_F95(AP,X,UPLO,ALPHA)
  810. ! Fortran77 call:
  811. ! CHPR(UPLO,N,ALPHA,X,INCX,AP)
  812. USE F95_PRECISION, ONLY: WP => SP
  813. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  814. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  815. COMPLEX(WP), INTENT(INOUT) :: AP(:)
  816. COMPLEX(WP), INTENT(IN) :: X(:)
  817. END SUBROUTINE CHPR_F95
  818. PURE SUBROUTINE ZHPR_F95(AP,X,UPLO,ALPHA)
  819. ! Fortran77 call:
  820. ! ZHPR(UPLO,N,ALPHA,X,INCX,AP)
  821. USE F95_PRECISION, ONLY: WP => DP
  822. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  823. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  824. COMPLEX(WP), INTENT(INOUT) :: AP(:)
  825. COMPLEX(WP), INTENT(IN) :: X(:)
  826. END SUBROUTINE ZHPR_F95
  827. END INTERFACE HPR
  828. INTERFACE HPR2
  829. ! UPLO='U','L'; default: 'U'
  830. ! Default ALPHA=1
  831. PURE SUBROUTINE CHPR2_F95(AP,X,Y,UPLO,ALPHA)
  832. ! Fortran77 call:
  833. ! CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  834. USE F95_PRECISION, ONLY: WP => SP
  835. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  836. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  837. COMPLEX(WP), INTENT(INOUT) :: AP(:)
  838. COMPLEX(WP), INTENT(IN) :: X(:)
  839. COMPLEX(WP), INTENT(IN) :: Y(:)
  840. END SUBROUTINE CHPR2_F95
  841. PURE SUBROUTINE ZHPR2_F95(AP,X,Y,UPLO,ALPHA)
  842. ! Fortran77 call:
  843. ! ZHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  844. USE F95_PRECISION, ONLY: WP => DP
  845. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  846. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  847. COMPLEX(WP), INTENT(INOUT) :: AP(:)
  848. COMPLEX(WP), INTENT(IN) :: X(:)
  849. COMPLEX(WP), INTENT(IN) :: Y(:)
  850. END SUBROUTINE ZHPR2_F95
  851. END INTERFACE HPR2
  852. INTERFACE SBMV
  853. ! UPLO='U','L'; default: 'U'
  854. ! Default ALPHA=1
  855. ! Default BETA=0
  856. PURE SUBROUTINE SSBMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  857. ! Fortran77 call:
  858. ! SSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  859. USE F95_PRECISION, ONLY: WP => SP
  860. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  861. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  862. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  863. REAL(WP), INTENT(IN) :: A(:,:)
  864. REAL(WP), INTENT(IN) :: X(:)
  865. REAL(WP), INTENT(INOUT) :: Y(:)
  866. END SUBROUTINE SSBMV_F95
  867. PURE SUBROUTINE DSBMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  868. ! Fortran77 call:
  869. ! DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  870. USE F95_PRECISION, ONLY: WP => DP
  871. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  872. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  873. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  874. REAL(WP), INTENT(IN) :: A(:,:)
  875. REAL(WP), INTENT(IN) :: X(:)
  876. REAL(WP), INTENT(INOUT) :: Y(:)
  877. END SUBROUTINE DSBMV_F95
  878. END INTERFACE SBMV
  879. INTERFACE SPMV
  880. ! UPLO='U','L'; default: 'U'
  881. ! Default ALPHA=1
  882. ! Default BETA=0
  883. PURE SUBROUTINE SSPMV_F95(AP,X,Y,UPLO,ALPHA,BETA)
  884. ! Fortran77 call:
  885. ! SSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  886. USE F95_PRECISION, ONLY: WP => SP
  887. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  888. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  889. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  890. REAL(WP), INTENT(IN) :: AP(:)
  891. REAL(WP), INTENT(IN) :: X(:)
  892. REAL(WP), INTENT(INOUT) :: Y(:)
  893. END SUBROUTINE SSPMV_F95
  894. PURE SUBROUTINE DSPMV_F95(AP,X,Y,UPLO,ALPHA,BETA)
  895. ! Fortran77 call:
  896. ! DSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  897. USE F95_PRECISION, ONLY: WP => DP
  898. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  899. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  900. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  901. REAL(WP), INTENT(IN) :: AP(:)
  902. REAL(WP), INTENT(IN) :: X(:)
  903. REAL(WP), INTENT(INOUT) :: Y(:)
  904. END SUBROUTINE DSPMV_F95
  905. END INTERFACE SPMV
  906. INTERFACE SPR
  907. ! UPLO='U','L'; default: 'U'
  908. ! Default ALPHA=1
  909. PURE SUBROUTINE SSPR_F95(AP,X,UPLO,ALPHA)
  910. ! Fortran77 call:
  911. ! SSPR(UPLO,N,ALPHA,X,INCX,AP)
  912. USE F95_PRECISION, ONLY: WP => SP
  913. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  914. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  915. REAL(WP), INTENT(INOUT) :: AP(:)
  916. REAL(WP), INTENT(IN) :: X(:)
  917. END SUBROUTINE SSPR_F95
  918. PURE SUBROUTINE DSPR_F95(AP,X,UPLO,ALPHA)
  919. ! Fortran77 call:
  920. ! DSPR(UPLO,N,ALPHA,X,INCX,AP)
  921. USE F95_PRECISION, ONLY: WP => DP
  922. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  923. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  924. REAL(WP), INTENT(INOUT) :: AP(:)
  925. REAL(WP), INTENT(IN) :: X(:)
  926. END SUBROUTINE DSPR_F95
  927. END INTERFACE SPR
  928. INTERFACE SPR2
  929. ! UPLO='U','L'; default: 'U'
  930. ! Default ALPHA=1
  931. PURE SUBROUTINE SSPR2_F95(AP,X,Y,UPLO,ALPHA)
  932. ! Fortran77 call:
  933. ! SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  934. USE F95_PRECISION, ONLY: WP => SP
  935. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  936. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  937. REAL(WP), INTENT(INOUT) :: AP(:)
  938. REAL(WP), INTENT(IN) :: X(:)
  939. REAL(WP), INTENT(IN) :: Y(:)
  940. END SUBROUTINE SSPR2_F95
  941. PURE SUBROUTINE DSPR2_F95(AP,X,Y,UPLO,ALPHA)
  942. ! Fortran77 call:
  943. ! DSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  944. USE F95_PRECISION, ONLY: WP => DP
  945. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  946. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  947. REAL(WP), INTENT(INOUT) :: AP(:)
  948. REAL(WP), INTENT(IN) :: X(:)
  949. REAL(WP), INTENT(IN) :: Y(:)
  950. END SUBROUTINE DSPR2_F95
  951. END INTERFACE SPR2
  952. INTERFACE SYMV
  953. ! UPLO='U','L'; default: 'U'
  954. ! Default ALPHA=1
  955. ! Default BETA=0
  956. PURE SUBROUTINE SSYMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  957. ! Fortran77 call:
  958. ! SSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  959. USE F95_PRECISION, ONLY: WP => SP
  960. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  961. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  962. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  963. REAL(WP), INTENT(IN) :: A(:,:)
  964. REAL(WP), INTENT(IN) :: X(:)
  965. REAL(WP), INTENT(INOUT) :: Y(:)
  966. END SUBROUTINE SSYMV_F95
  967. PURE SUBROUTINE DSYMV_F95(A,X,Y,UPLO,ALPHA,BETA)
  968. ! Fortran77 call:
  969. ! DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  970. USE F95_PRECISION, ONLY: WP => DP
  971. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  972. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  973. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  974. REAL(WP), INTENT(IN) :: A(:,:)
  975. REAL(WP), INTENT(IN) :: X(:)
  976. REAL(WP), INTENT(INOUT) :: Y(:)
  977. END SUBROUTINE DSYMV_F95
  978. END INTERFACE SYMV
  979. INTERFACE SYR
  980. ! UPLO='U','L'; default: 'U'
  981. ! Default ALPHA=1
  982. PURE SUBROUTINE SSYR_F95(A,X,UPLO,ALPHA)
  983. ! Fortran77 call:
  984. ! SSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
  985. USE F95_PRECISION, ONLY: WP => SP
  986. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  987. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  988. REAL(WP), INTENT(INOUT) :: A(:,:)
  989. REAL(WP), INTENT(IN) :: X(:)
  990. END SUBROUTINE SSYR_F95
  991. PURE SUBROUTINE DSYR_F95(A,X,UPLO,ALPHA)
  992. ! Fortran77 call:
  993. ! DSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
  994. USE F95_PRECISION, ONLY: WP => DP
  995. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  996. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  997. REAL(WP), INTENT(INOUT) :: A(:,:)
  998. REAL(WP), INTENT(IN) :: X(:)
  999. END SUBROUTINE DSYR_F95
  1000. END INTERFACE SYR
  1001. INTERFACE SYR2
  1002. ! UPLO='U','L'; default: 'U'
  1003. ! Default ALPHA=1
  1004. PURE SUBROUTINE SSYR2_F95(A,X,Y,UPLO,ALPHA)
  1005. ! Fortran77 call:
  1006. ! SSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  1007. USE F95_PRECISION, ONLY: WP => SP
  1008. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1009. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1010. REAL(WP), INTENT(INOUT) :: A(:,:)
  1011. REAL(WP), INTENT(IN) :: X(:)
  1012. REAL(WP), INTENT(IN) :: Y(:)
  1013. END SUBROUTINE SSYR2_F95
  1014. PURE SUBROUTINE DSYR2_F95(A,X,Y,UPLO,ALPHA)
  1015. ! Fortran77 call:
  1016. ! DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  1017. USE F95_PRECISION, ONLY: WP => DP
  1018. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1019. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1020. REAL(WP), INTENT(INOUT) :: A(:,:)
  1021. REAL(WP), INTENT(IN) :: X(:)
  1022. REAL(WP), INTENT(IN) :: Y(:)
  1023. END SUBROUTINE DSYR2_F95
  1024. END INTERFACE SYR2
  1025. INTERFACE TBMV
  1026. ! UPLO='U','L'; default: 'U'
  1027. ! TRANS='N','C','T'; default: 'N'
  1028. ! DIAG='N','U'; default: 'N'
  1029. PURE SUBROUTINE STBMV_F95(A,X,UPLO,TRANS,DIAG)
  1030. ! Fortran77 call:
  1031. ! STBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1032. USE F95_PRECISION, ONLY: WP => SP
  1033. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1034. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1035. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1036. REAL(WP), INTENT(IN) :: A(:,:)
  1037. REAL(WP), INTENT(INOUT) :: X(:)
  1038. END SUBROUTINE STBMV_F95
  1039. PURE SUBROUTINE DTBMV_F95(A,X,UPLO,TRANS,DIAG)
  1040. ! Fortran77 call:
  1041. ! DTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1042. USE F95_PRECISION, ONLY: WP => DP
  1043. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1044. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1045. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1046. REAL(WP), INTENT(IN) :: A(:,:)
  1047. REAL(WP), INTENT(INOUT) :: X(:)
  1048. END SUBROUTINE DTBMV_F95
  1049. PURE SUBROUTINE CTBMV_F95(A,X,UPLO,TRANS,DIAG)
  1050. ! Fortran77 call:
  1051. ! CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1052. USE F95_PRECISION, ONLY: WP => SP
  1053. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1054. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1055. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1056. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1057. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1058. END SUBROUTINE CTBMV_F95
  1059. PURE SUBROUTINE ZTBMV_F95(A,X,UPLO,TRANS,DIAG)
  1060. ! Fortran77 call:
  1061. ! ZTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1062. USE F95_PRECISION, ONLY: WP => DP
  1063. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1064. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1065. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1066. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1067. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1068. END SUBROUTINE ZTBMV_F95
  1069. END INTERFACE TBMV
  1070. INTERFACE TBSV
  1071. ! UPLO='U','L'; default: 'U'
  1072. ! TRANS='N','C','T'; default: 'N'
  1073. ! DIAG='N','U'; default: 'N'
  1074. PURE SUBROUTINE STBSV_F95(A,X,UPLO,TRANS,DIAG)
  1075. ! Fortran77 call:
  1076. ! STBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1077. USE F95_PRECISION, ONLY: WP => SP
  1078. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1079. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1080. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1081. REAL(WP), INTENT(IN) :: A(:,:)
  1082. REAL(WP), INTENT(INOUT) :: X(:)
  1083. END SUBROUTINE STBSV_F95
  1084. PURE SUBROUTINE DTBSV_F95(A,X,UPLO,TRANS,DIAG)
  1085. ! Fortran77 call:
  1086. ! DTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1087. USE F95_PRECISION, ONLY: WP => DP
  1088. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1089. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1090. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1091. REAL(WP), INTENT(IN) :: A(:,:)
  1092. REAL(WP), INTENT(INOUT) :: X(:)
  1093. END SUBROUTINE DTBSV_F95
  1094. PURE SUBROUTINE CTBSV_F95(A,X,UPLO,TRANS,DIAG)
  1095. ! Fortran77 call:
  1096. ! CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1097. USE F95_PRECISION, ONLY: WP => SP
  1098. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1099. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1100. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1101. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1102. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1103. END SUBROUTINE CTBSV_F95
  1104. PURE SUBROUTINE ZTBSV_F95(A,X,UPLO,TRANS,DIAG)
  1105. ! Fortran77 call:
  1106. ! ZTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1107. USE F95_PRECISION, ONLY: WP => DP
  1108. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1109. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1110. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1111. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1112. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1113. END SUBROUTINE ZTBSV_F95
  1114. END INTERFACE TBSV
  1115. INTERFACE TPMV
  1116. ! UPLO='U','L'; default: 'U'
  1117. ! TRANS='N','C','T'; default: 'N'
  1118. ! DIAG='N','U'; default: 'N'
  1119. PURE SUBROUTINE STPMV_F95(AP,X,UPLO,TRANS,DIAG)
  1120. ! Fortran77 call:
  1121. ! STPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1122. USE F95_PRECISION, ONLY: WP => SP
  1123. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1124. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1125. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1126. REAL(WP), INTENT(IN) :: AP(:)
  1127. REAL(WP), INTENT(INOUT) :: X(:)
  1128. END SUBROUTINE STPMV_F95
  1129. PURE SUBROUTINE DTPMV_F95(AP,X,UPLO,TRANS,DIAG)
  1130. ! Fortran77 call:
  1131. ! DTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1132. USE F95_PRECISION, ONLY: WP => DP
  1133. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1134. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1135. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1136. REAL(WP), INTENT(IN) :: AP(:)
  1137. REAL(WP), INTENT(INOUT) :: X(:)
  1138. END SUBROUTINE DTPMV_F95
  1139. PURE SUBROUTINE CTPMV_F95(AP,X,UPLO,TRANS,DIAG)
  1140. ! Fortran77 call:
  1141. ! CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1142. USE F95_PRECISION, ONLY: WP => SP
  1143. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1144. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1145. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1146. COMPLEX(WP), INTENT(IN) :: AP(:)
  1147. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1148. END SUBROUTINE CTPMV_F95
  1149. PURE SUBROUTINE ZTPMV_F95(AP,X,UPLO,TRANS,DIAG)
  1150. ! Fortran77 call:
  1151. ! ZTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1152. USE F95_PRECISION, ONLY: WP => DP
  1153. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1154. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1155. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1156. COMPLEX(WP), INTENT(IN) :: AP(:)
  1157. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1158. END SUBROUTINE ZTPMV_F95
  1159. END INTERFACE TPMV
  1160. INTERFACE TPSV
  1161. ! UPLO='U','L'; default: 'U'
  1162. ! TRANS='N','C','T'; default: 'N'
  1163. ! DIAG='N','U'; default: 'N'
  1164. PURE SUBROUTINE STPSV_F95(AP,X,UPLO,TRANS,DIAG)
  1165. ! Fortran77 call:
  1166. ! STPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1167. USE F95_PRECISION, ONLY: WP => SP
  1168. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1169. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1170. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1171. REAL(WP), INTENT(IN) :: AP(:)
  1172. REAL(WP), INTENT(INOUT) :: X(:)
  1173. END SUBROUTINE STPSV_F95
  1174. PURE SUBROUTINE DTPSV_F95(AP,X,UPLO,TRANS,DIAG)
  1175. ! Fortran77 call:
  1176. ! DTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1177. USE F95_PRECISION, ONLY: WP => DP
  1178. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1179. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1180. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1181. REAL(WP), INTENT(IN) :: AP(:)
  1182. REAL(WP), INTENT(INOUT) :: X(:)
  1183. END SUBROUTINE DTPSV_F95
  1184. PURE SUBROUTINE CTPSV_F95(AP,X,UPLO,TRANS,DIAG)
  1185. ! Fortran77 call:
  1186. ! CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1187. USE F95_PRECISION, ONLY: WP => SP
  1188. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1189. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1190. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1191. COMPLEX(WP), INTENT(IN) :: AP(:)
  1192. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1193. END SUBROUTINE CTPSV_F95
  1194. PURE SUBROUTINE ZTPSV_F95(AP,X,UPLO,TRANS,DIAG)
  1195. ! Fortran77 call:
  1196. ! ZTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  1197. USE F95_PRECISION, ONLY: WP => DP
  1198. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1199. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1200. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1201. COMPLEX(WP), INTENT(IN) :: AP(:)
  1202. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1203. END SUBROUTINE ZTPSV_F95
  1204. END INTERFACE TPSV
  1205. INTERFACE TRMV
  1206. ! UPLO='U','L'; default: 'U'
  1207. ! TRANS='N','C','T'; default: 'N'
  1208. ! DIAG='N','U'; default: 'N'
  1209. PURE SUBROUTINE STRMV_F95(A,X,UPLO,TRANS,DIAG)
  1210. ! Fortran77 call:
  1211. ! STRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1212. USE F95_PRECISION, ONLY: WP => SP
  1213. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1214. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1215. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1216. REAL(WP), INTENT(IN) :: A(:,:)
  1217. REAL(WP), INTENT(INOUT) :: X(:)
  1218. END SUBROUTINE STRMV_F95
  1219. PURE SUBROUTINE DTRMV_F95(A,X,UPLO,TRANS,DIAG)
  1220. ! Fortran77 call:
  1221. ! DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1222. USE F95_PRECISION, ONLY: WP => DP
  1223. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1224. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1225. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1226. REAL(WP), INTENT(IN) :: A(:,:)
  1227. REAL(WP), INTENT(INOUT) :: X(:)
  1228. END SUBROUTINE DTRMV_F95
  1229. PURE SUBROUTINE CTRMV_F95(A,X,UPLO,TRANS,DIAG)
  1230. ! Fortran77 call:
  1231. ! CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1232. USE F95_PRECISION, ONLY: WP => SP
  1233. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1234. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1235. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1236. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1237. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1238. END SUBROUTINE CTRMV_F95
  1239. PURE SUBROUTINE ZTRMV_F95(A,X,UPLO,TRANS,DIAG)
  1240. ! Fortran77 call:
  1241. ! ZTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1242. USE F95_PRECISION, ONLY: WP => DP
  1243. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1244. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1245. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1246. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1247. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1248. END SUBROUTINE ZTRMV_F95
  1249. END INTERFACE TRMV
  1250. INTERFACE TRSV
  1251. ! UPLO='U','L'; default: 'U'
  1252. ! TRANS='N','C','T'; default: 'N'
  1253. ! DIAG='N','U'; default: 'N'
  1254. PURE SUBROUTINE STRSV_F95(A,X,UPLO,TRANS,DIAG)
  1255. ! Fortran77 call:
  1256. ! STRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1257. USE F95_PRECISION, ONLY: WP => SP
  1258. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1259. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1260. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1261. REAL(WP), INTENT(IN) :: A(:,:)
  1262. REAL(WP), INTENT(INOUT) :: X(:)
  1263. END SUBROUTINE STRSV_F95
  1264. PURE SUBROUTINE DTRSV_F95(A,X,UPLO,TRANS,DIAG)
  1265. ! Fortran77 call:
  1266. ! DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1267. USE F95_PRECISION, ONLY: WP => DP
  1268. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1269. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1270. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1271. REAL(WP), INTENT(IN) :: A(:,:)
  1272. REAL(WP), INTENT(INOUT) :: X(:)
  1273. END SUBROUTINE DTRSV_F95
  1274. PURE SUBROUTINE CTRSV_F95(A,X,UPLO,TRANS,DIAG)
  1275. ! Fortran77 call:
  1276. ! CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1277. USE F95_PRECISION, ONLY: WP => SP
  1278. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1279. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1280. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1281. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1282. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1283. END SUBROUTINE CTRSV_F95
  1284. PURE SUBROUTINE ZTRSV_F95(A,X,UPLO,TRANS,DIAG)
  1285. ! Fortran77 call:
  1286. ! ZTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  1287. USE F95_PRECISION, ONLY: WP => DP
  1288. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1289. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1290. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1291. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1292. COMPLEX(WP), INTENT(INOUT) :: X(:)
  1293. END SUBROUTINE ZTRSV_F95
  1294. END INTERFACE TRSV
  1295. INTERFACE GEMM
  1296. ! TRANSA='N','C','T'; default: 'N'
  1297. ! TRANSB='N','C','T'; default: 'N'
  1298. ! Default ALPHA=1
  1299. ! Default BETA=0
  1300. PURE SUBROUTINE SGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1301. ! Fortran77 call:
  1302. ! SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1303. USE F95_PRECISION, ONLY: WP => SP
  1304. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1305. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1306. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1307. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1308. REAL(WP), INTENT(IN) :: A(:,:)
  1309. REAL(WP), INTENT(IN) :: B(:,:)
  1310. REAL(WP), INTENT(INOUT) :: C(:,:)
  1311. END SUBROUTINE SGEMM_F95
  1312. PURE SUBROUTINE DGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1313. ! Fortran77 call:
  1314. ! DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1315. USE F95_PRECISION, ONLY: WP => DP
  1316. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1317. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1318. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1319. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1320. REAL(WP), INTENT(IN) :: A(:,:)
  1321. REAL(WP), INTENT(IN) :: B(:,:)
  1322. REAL(WP), INTENT(INOUT) :: C(:,:)
  1323. END SUBROUTINE DGEMM_F95
  1324. PURE SUBROUTINE CGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1325. ! Fortran77 call:
  1326. ! CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1327. USE F95_PRECISION, ONLY: WP => SP
  1328. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1329. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1330. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1331. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1332. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1333. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1334. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1335. END SUBROUTINE CGEMM_F95
  1336. PURE SUBROUTINE ZGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1337. ! Fortran77 call:
  1338. ! ZGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1339. USE F95_PRECISION, ONLY: WP => DP
  1340. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1341. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1342. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1343. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1344. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1345. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1346. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1347. END SUBROUTINE ZGEMM_F95
  1348. PURE SUBROUTINE SCGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1349. ! Fortran77 call:
  1350. ! SCGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1351. USE F95_PRECISION, ONLY: WP => SP
  1352. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1353. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1354. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1355. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1356. REAL(WP), INTENT(IN) :: A(:,:)
  1357. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1358. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1359. END SUBROUTINE SCGEMM_F95
  1360. PURE SUBROUTINE DZGEMM_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  1361. ! Fortran77 call:
  1362. ! DZGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1363. USE F95_PRECISION, ONLY: WP => DP
  1364. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1365. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1366. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1367. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1368. REAL(WP), INTENT(IN) :: A(:,:)
  1369. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1370. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1371. END SUBROUTINE DZGEMM_F95
  1372. END INTERFACE GEMM
  1373. INTERFACE HEMM
  1374. ! SIDE='L','R'; default: 'L'
  1375. ! UPLO='U','L'; default: 'U'
  1376. ! Default ALPHA=1
  1377. ! Default BETA=0
  1378. PURE SUBROUTINE CHEMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1379. ! Fortran77 call:
  1380. ! CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1381. USE F95_PRECISION, ONLY: WP => SP
  1382. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1383. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1384. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1385. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1386. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1387. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1388. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1389. END SUBROUTINE CHEMM_F95
  1390. PURE SUBROUTINE ZHEMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1391. ! Fortran77 call:
  1392. ! ZHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1393. USE F95_PRECISION, ONLY: WP => DP
  1394. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1395. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1396. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1397. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1398. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1399. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1400. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1401. END SUBROUTINE ZHEMM_F95
  1402. END INTERFACE HEMM
  1403. INTERFACE HERK
  1404. ! UPLO='U','L'; default: 'U'
  1405. ! TRANS='N','C'; default: 'N'
  1406. ! Default ALPHA=1
  1407. ! Default BETA=0
  1408. PURE SUBROUTINE CHERK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1409. ! Fortran77 call:
  1410. ! CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1411. USE F95_PRECISION, ONLY: WP => SP
  1412. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1413. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1414. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1415. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1416. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1417. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1418. END SUBROUTINE CHERK_F95
  1419. PURE SUBROUTINE ZHERK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1420. ! Fortran77 call:
  1421. ! ZHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1422. USE F95_PRECISION, ONLY: WP => DP
  1423. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1424. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1425. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1426. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1427. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1428. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1429. END SUBROUTINE ZHERK_F95
  1430. END INTERFACE HERK
  1431. INTERFACE HER2K
  1432. ! UPLO='U','L'; default: 'U'
  1433. ! TRANS='N','C'; default: 'N'
  1434. ! Default ALPHA=1
  1435. ! Default BETA=0
  1436. PURE SUBROUTINE CHER2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1437. ! Fortran77 call:
  1438. ! CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1439. USE F95_PRECISION, ONLY: WP => SP
  1440. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1441. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1442. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1443. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1444. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1445. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1446. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1447. END SUBROUTINE CHER2K_F95
  1448. PURE SUBROUTINE ZHER2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1449. ! Fortran77 call:
  1450. ! ZHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1451. USE F95_PRECISION, ONLY: WP => DP
  1452. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1453. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1454. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1455. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1456. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1457. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1458. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1459. END SUBROUTINE ZHER2K_F95
  1460. END INTERFACE HER2K
  1461. INTERFACE SYMM
  1462. ! SIDE='L','R'; default: 'L'
  1463. ! UPLO='U','L'; default: 'U'
  1464. ! Default ALPHA=1
  1465. ! Default BETA=0
  1466. PURE SUBROUTINE SSYMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1467. ! Fortran77 call:
  1468. ! SSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1469. USE F95_PRECISION, ONLY: WP => SP
  1470. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1471. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1472. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1473. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1474. REAL(WP), INTENT(IN) :: A(:,:)
  1475. REAL(WP), INTENT(IN) :: B(:,:)
  1476. REAL(WP), INTENT(INOUT) :: C(:,:)
  1477. END SUBROUTINE SSYMM_F95
  1478. PURE SUBROUTINE DSYMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1479. ! Fortran77 call:
  1480. ! DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1481. USE F95_PRECISION, ONLY: WP => DP
  1482. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1483. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1484. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1485. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1486. REAL(WP), INTENT(IN) :: A(:,:)
  1487. REAL(WP), INTENT(IN) :: B(:,:)
  1488. REAL(WP), INTENT(INOUT) :: C(:,:)
  1489. END SUBROUTINE DSYMM_F95
  1490. PURE SUBROUTINE CSYMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1491. ! Fortran77 call:
  1492. ! CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1493. USE F95_PRECISION, ONLY: WP => SP
  1494. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1495. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1496. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1497. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1498. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1499. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1500. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1501. END SUBROUTINE CSYMM_F95
  1502. PURE SUBROUTINE ZSYMM_F95(A,B,C,SIDE,UPLO,ALPHA,BETA)
  1503. ! Fortran77 call:
  1504. ! ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1505. USE F95_PRECISION, ONLY: WP => DP
  1506. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1507. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1508. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1509. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1510. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1511. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1512. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1513. END SUBROUTINE ZSYMM_F95
  1514. END INTERFACE SYMM
  1515. INTERFACE SYRK
  1516. ! UPLO='U','L'; default: 'U'
  1517. ! TRANS='N','C','T'; default: 'N'
  1518. ! Default ALPHA=1
  1519. ! Default BETA=0
  1520. PURE SUBROUTINE SSYRK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1521. ! Fortran77 call:
  1522. ! SSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1523. USE F95_PRECISION, ONLY: WP => SP
  1524. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1525. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1526. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1527. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1528. REAL(WP), INTENT(IN) :: A(:,:)
  1529. REAL(WP), INTENT(INOUT) :: C(:,:)
  1530. END SUBROUTINE SSYRK_F95
  1531. PURE SUBROUTINE DSYRK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1532. ! Fortran77 call:
  1533. ! DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1534. USE F95_PRECISION, ONLY: WP => DP
  1535. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1536. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1537. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1538. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1539. REAL(WP), INTENT(IN) :: A(:,:)
  1540. REAL(WP), INTENT(INOUT) :: C(:,:)
  1541. END SUBROUTINE DSYRK_F95
  1542. PURE SUBROUTINE CSYRK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1543. ! Fortran77 call:
  1544. ! CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1545. USE F95_PRECISION, ONLY: WP => SP
  1546. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1547. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1548. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1549. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1550. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1551. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1552. END SUBROUTINE CSYRK_F95
  1553. PURE SUBROUTINE ZSYRK_F95(A,C,UPLO,TRANS,ALPHA,BETA)
  1554. ! Fortran77 call:
  1555. ! ZSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  1556. USE F95_PRECISION, ONLY: WP => DP
  1557. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1558. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1559. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1560. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1561. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1562. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1563. END SUBROUTINE ZSYRK_F95
  1564. END INTERFACE SYRK
  1565. INTERFACE SYR2K
  1566. ! UPLO='U','L'; default: 'U'
  1567. ! TRANS='N','C','T'; default: 'N'
  1568. ! Default ALPHA=1
  1569. ! Default BETA=0
  1570. PURE SUBROUTINE SSYR2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1571. ! Fortran77 call:
  1572. ! SSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1573. USE F95_PRECISION, ONLY: WP => SP
  1574. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1575. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1576. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1577. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1578. REAL(WP), INTENT(IN) :: A(:,:)
  1579. REAL(WP), INTENT(IN) :: B(:,:)
  1580. REAL(WP), INTENT(INOUT) :: C(:,:)
  1581. END SUBROUTINE SSYR2K_F95
  1582. PURE SUBROUTINE DSYR2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1583. ! Fortran77 call:
  1584. ! DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1585. USE F95_PRECISION, ONLY: WP => DP
  1586. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1587. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1588. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1589. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1590. REAL(WP), INTENT(IN) :: A(:,:)
  1591. REAL(WP), INTENT(IN) :: B(:,:)
  1592. REAL(WP), INTENT(INOUT) :: C(:,:)
  1593. END SUBROUTINE DSYR2K_F95
  1594. PURE SUBROUTINE CSYR2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1595. ! Fortran77 call:
  1596. ! CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1597. USE F95_PRECISION, ONLY: WP => SP
  1598. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1599. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1600. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1601. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1602. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1603. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1604. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1605. END SUBROUTINE CSYR2K_F95
  1606. PURE SUBROUTINE ZSYR2K_F95(A,B,C,UPLO,TRANS,ALPHA,BETA)
  1607. ! Fortran77 call:
  1608. ! ZSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1609. USE F95_PRECISION, ONLY: WP => DP
  1610. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1611. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANS
  1612. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1613. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1614. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1615. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1616. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1617. END SUBROUTINE ZSYR2K_F95
  1618. END INTERFACE SYR2K
  1619. INTERFACE TRMM
  1620. ! SIDE='L','R'; default: 'L'
  1621. ! UPLO='U','L'; default: 'U'
  1622. ! TRANSA='N','C','T'; default: 'N'
  1623. ! DIAG='N','U'; default: 'N'
  1624. ! Default ALPHA=1
  1625. PURE SUBROUTINE STRMM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1626. ! Fortran77 call:
  1627. ! STRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1628. USE F95_PRECISION, ONLY: WP => SP
  1629. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1630. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1631. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1632. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1633. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1634. REAL(WP), INTENT(IN) :: A(:,:)
  1635. REAL(WP), INTENT(INOUT) :: B(:,:)
  1636. END SUBROUTINE STRMM_F95
  1637. PURE SUBROUTINE DTRMM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1638. ! Fortran77 call:
  1639. ! DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1640. USE F95_PRECISION, ONLY: WP => DP
  1641. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1642. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1643. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1644. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1645. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1646. REAL(WP), INTENT(IN) :: A(:,:)
  1647. REAL(WP), INTENT(INOUT) :: B(:,:)
  1648. END SUBROUTINE DTRMM_F95
  1649. PURE SUBROUTINE CTRMM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1650. ! Fortran77 call:
  1651. ! CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1652. USE F95_PRECISION, ONLY: WP => SP
  1653. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1654. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1655. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1656. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1657. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1658. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1659. COMPLEX(WP), INTENT(INOUT) :: B(:,:)
  1660. END SUBROUTINE CTRMM_F95
  1661. PURE SUBROUTINE ZTRMM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1662. ! Fortran77 call:
  1663. ! ZTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1664. USE F95_PRECISION, ONLY: WP => DP
  1665. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1666. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1667. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1668. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1669. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1670. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1671. COMPLEX(WP), INTENT(INOUT) :: B(:,:)
  1672. END SUBROUTINE ZTRMM_F95
  1673. END INTERFACE TRMM
  1674. INTERFACE TRSM
  1675. ! SIDE='L','R'; default: 'L'
  1676. ! UPLO='U','L'; default: 'U'
  1677. ! TRANSA='N','C','T'; default: 'N'
  1678. ! DIAG='N','U'; default: 'N'
  1679. ! Default ALPHA=1
  1680. PURE SUBROUTINE STRSM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1681. ! Fortran77 call:
  1682. ! STRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1683. USE F95_PRECISION, ONLY: WP => SP
  1684. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1685. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1686. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1687. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1688. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1689. REAL(WP), INTENT(IN) :: A(:,:)
  1690. REAL(WP), INTENT(INOUT) :: B(:,:)
  1691. END SUBROUTINE STRSM_F95
  1692. PURE SUBROUTINE DTRSM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1693. ! Fortran77 call:
  1694. ! DTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1695. USE F95_PRECISION, ONLY: WP => DP
  1696. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1697. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1698. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1699. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1700. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1701. REAL(WP), INTENT(IN) :: A(:,:)
  1702. REAL(WP), INTENT(INOUT) :: B(:,:)
  1703. END SUBROUTINE DTRSM_F95
  1704. PURE SUBROUTINE CTRSM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1705. ! Fortran77 call:
  1706. ! CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1707. USE F95_PRECISION, ONLY: WP => SP
  1708. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1709. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1710. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1711. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1712. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1713. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1714. COMPLEX(WP), INTENT(INOUT) :: B(:,:)
  1715. END SUBROUTINE CTRSM_F95
  1716. PURE SUBROUTINE ZTRSM_F95(A,B,SIDE,UPLO,TRANSA,DIAG,ALPHA)
  1717. ! Fortran77 call:
  1718. ! ZTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  1719. USE F95_PRECISION, ONLY: WP => DP
  1720. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: SIDE
  1721. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1722. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1723. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: DIAG
  1724. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1725. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1726. COMPLEX(WP), INTENT(INOUT) :: B(:,:)
  1727. END SUBROUTINE ZTRSM_F95
  1728. END INTERFACE TRSM
  1729. INTERFACE GEMMT
  1730. ! UPLO='U','L'; default: 'U'
  1731. ! TRANSA='N','C','T'; default: 'N'
  1732. ! TRANSB='N','C','T'; default: 'N'
  1733. ! Default ALPHA=1
  1734. ! Default BETA=0
  1735. PURE SUBROUTINE SGEMMT_F95(A,B,C,UPLO,TRANSA,TRANSB,ALPHA,BETA)
  1736. ! Fortran77 call:
  1737. ! SGEMMT(UPLO,TRANSA,TRANSB,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1738. USE F95_PRECISION, ONLY: WP => SP
  1739. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1740. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1741. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1742. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1743. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1744. REAL(WP), INTENT(IN) :: A(:,:)
  1745. REAL(WP), INTENT(IN) :: B(:,:)
  1746. REAL(WP), INTENT(INOUT) :: C(:,:)
  1747. END SUBROUTINE SGEMMT_F95
  1748. PURE SUBROUTINE DGEMMT_F95(A,B,C,UPLO,TRANSA,TRANSB,ALPHA,BETA)
  1749. ! Fortran77 call:
  1750. ! DGEMMT(UPLO,TRANSA,TRANSB,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1751. USE F95_PRECISION, ONLY: WP => DP
  1752. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1753. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1754. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1755. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  1756. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  1757. REAL(WP), INTENT(IN) :: A(:,:)
  1758. REAL(WP), INTENT(IN) :: B(:,:)
  1759. REAL(WP), INTENT(INOUT) :: C(:,:)
  1760. END SUBROUTINE DGEMMT_F95
  1761. PURE SUBROUTINE CGEMMT_F95(A,B,C,UPLO,TRANSA,TRANSB,ALPHA,BETA)
  1762. ! Fortran77 call:
  1763. ! CGEMMT(UPLO,TRANSA,TRANSB,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1764. USE F95_PRECISION, ONLY: WP => SP
  1765. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1766. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1767. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1768. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1769. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1770. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1771. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1772. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1773. END SUBROUTINE CGEMMT_F95
  1774. PURE SUBROUTINE ZGEMMT_F95(A,B,C,UPLO,TRANSA,TRANSB,ALPHA,BETA)
  1775. ! Fortran77 call:
  1776. ! ZGEMMT(UPLO,TRANSA,TRANSB,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  1777. USE F95_PRECISION, ONLY: WP => DP
  1778. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
  1779. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  1780. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  1781. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  1782. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  1783. COMPLEX(WP), INTENT(IN) :: A(:,:)
  1784. COMPLEX(WP), INTENT(IN) :: B(:,:)
  1785. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  1786. END SUBROUTINE ZGEMMT_F95
  1787. END INTERFACE GEMMT
  1788. INTERFACE AXPYI
  1789. ! Default A=1
  1790. PURE SUBROUTINE SAXPYI_F95(X,INDX,Y,A)
  1791. ! Fortran77 call:
  1792. ! SAXPYI(NZ,A,X,INDX,Y)
  1793. USE F95_PRECISION, ONLY: WP => SP
  1794. REAL(WP), INTENT(IN), OPTIONAL :: A
  1795. REAL(WP), INTENT(IN) :: X(:)
  1796. INTEGER, INTENT(IN) :: INDX(:)
  1797. REAL(WP), INTENT(INOUT) :: Y(:)
  1798. END SUBROUTINE SAXPYI_F95
  1799. PURE SUBROUTINE DAXPYI_F95(X,INDX,Y,A)
  1800. ! Fortran77 call:
  1801. ! DAXPYI(NZ,A,X,INDX,Y)
  1802. USE F95_PRECISION, ONLY: WP => DP
  1803. REAL(WP), INTENT(IN), OPTIONAL :: A
  1804. REAL(WP), INTENT(IN) :: X(:)
  1805. INTEGER, INTENT(IN) :: INDX(:)
  1806. REAL(WP), INTENT(INOUT) :: Y(:)
  1807. END SUBROUTINE DAXPYI_F95
  1808. PURE SUBROUTINE CAXPYI_F95(X,INDX,Y,A)
  1809. ! Fortran77 call:
  1810. ! CAXPYI(NZ,A,X,INDX,Y)
  1811. USE F95_PRECISION, ONLY: WP => SP
  1812. COMPLEX(WP), INTENT(IN), OPTIONAL :: A
  1813. COMPLEX(WP), INTENT(IN) :: X(:)
  1814. INTEGER, INTENT(IN) :: INDX(:)
  1815. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  1816. END SUBROUTINE CAXPYI_F95
  1817. PURE SUBROUTINE ZAXPYI_F95(X,INDX,Y,A)
  1818. ! Fortran77 call:
  1819. ! ZAXPYI(NZ,A,X,INDX,Y)
  1820. USE F95_PRECISION, ONLY: WP => DP
  1821. COMPLEX(WP), INTENT(IN), OPTIONAL :: A
  1822. COMPLEX(WP), INTENT(IN) :: X(:)
  1823. INTEGER, INTENT(IN) :: INDX(:)
  1824. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  1825. END SUBROUTINE ZAXPYI_F95
  1826. END INTERFACE AXPYI
  1827. INTERFACE DOTI
  1828. PURE FUNCTION SDOTI_F95(X,INDX,Y)
  1829. ! Fortran77 call:
  1830. ! SDOTI(NZ,X,INDX,Y)
  1831. USE F95_PRECISION, ONLY: WP => SP
  1832. REAL(WP) :: SDOTI_F95
  1833. REAL(WP), INTENT(IN) :: X(:)
  1834. INTEGER, INTENT(IN) :: INDX(:)
  1835. REAL(WP), INTENT(IN) :: Y(:)
  1836. END FUNCTION SDOTI_F95
  1837. PURE FUNCTION DDOTI_F95(X,INDX,Y)
  1838. ! Fortran77 call:
  1839. ! DDOTI(NZ,X,INDX,Y)
  1840. USE F95_PRECISION, ONLY: WP => DP
  1841. REAL(WP) :: DDOTI_F95
  1842. REAL(WP), INTENT(IN) :: X(:)
  1843. INTEGER, INTENT(IN) :: INDX(:)
  1844. REAL(WP), INTENT(IN) :: Y(:)
  1845. END FUNCTION DDOTI_F95
  1846. END INTERFACE DOTI
  1847. INTERFACE DOTCI
  1848. PURE FUNCTION CDOTCI_F95(X,INDX,Y)
  1849. ! Fortran77 call:
  1850. ! CDOTCI(NZ,X,INDX,Y)
  1851. USE F95_PRECISION, ONLY: WP => SP
  1852. COMPLEX(WP) :: CDOTCI_F95
  1853. COMPLEX(WP), INTENT(IN) :: X(:)
  1854. INTEGER, INTENT(IN) :: INDX(:)
  1855. COMPLEX(WP), INTENT(IN) :: Y(:)
  1856. END FUNCTION CDOTCI_F95
  1857. PURE FUNCTION ZDOTCI_F95(X,INDX,Y)
  1858. ! Fortran77 call:
  1859. ! ZDOTCI(NZ,X,INDX,Y)
  1860. USE F95_PRECISION, ONLY: WP => DP
  1861. COMPLEX(WP) :: ZDOTCI_F95
  1862. COMPLEX(WP), INTENT(IN) :: X(:)
  1863. INTEGER, INTENT(IN) :: INDX(:)
  1864. COMPLEX(WP), INTENT(IN) :: Y(:)
  1865. END FUNCTION ZDOTCI_F95
  1866. END INTERFACE DOTCI
  1867. INTERFACE DOTUI
  1868. PURE FUNCTION CDOTUI_F95(X,INDX,Y)
  1869. ! Fortran77 call:
  1870. ! CDOTUI(NZ,X,INDX,Y)
  1871. USE F95_PRECISION, ONLY: WP => SP
  1872. COMPLEX(WP) :: CDOTUI_F95
  1873. COMPLEX(WP), INTENT(IN) :: X(:)
  1874. INTEGER, INTENT(IN) :: INDX(:)
  1875. COMPLEX(WP), INTENT(IN) :: Y(:)
  1876. END FUNCTION CDOTUI_F95
  1877. PURE FUNCTION ZDOTUI_F95(X,INDX,Y)
  1878. ! Fortran77 call:
  1879. ! ZDOTUI(NZ,X,INDX,Y)
  1880. USE F95_PRECISION, ONLY: WP => DP
  1881. COMPLEX(WP) :: ZDOTUI_F95
  1882. COMPLEX(WP), INTENT(IN) :: X(:)
  1883. INTEGER, INTENT(IN) :: INDX(:)
  1884. COMPLEX(WP), INTENT(IN) :: Y(:)
  1885. END FUNCTION ZDOTUI_F95
  1886. END INTERFACE DOTUI
  1887. INTERFACE GTHR
  1888. PURE SUBROUTINE SGTHR_F95(X,INDX,Y)
  1889. ! Fortran77 call:
  1890. ! SGTHR(NZ,Y,X,INDX)
  1891. USE F95_PRECISION, ONLY: WP => SP
  1892. REAL(WP), INTENT(OUT) :: X(:)
  1893. INTEGER, INTENT(IN) :: INDX(:)
  1894. REAL(WP), INTENT(IN) :: Y(:)
  1895. END SUBROUTINE SGTHR_F95
  1896. PURE SUBROUTINE DGTHR_F95(X,INDX,Y)
  1897. ! Fortran77 call:
  1898. ! DGTHR(NZ,Y,X,INDX)
  1899. USE F95_PRECISION, ONLY: WP => DP
  1900. REAL(WP), INTENT(OUT) :: X(:)
  1901. INTEGER, INTENT(IN) :: INDX(:)
  1902. REAL(WP), INTENT(IN) :: Y(:)
  1903. END SUBROUTINE DGTHR_F95
  1904. PURE SUBROUTINE CGTHR_F95(X,INDX,Y)
  1905. ! Fortran77 call:
  1906. ! CGTHR(NZ,Y,X,INDX)
  1907. USE F95_PRECISION, ONLY: WP => SP
  1908. COMPLEX(WP), INTENT(OUT) :: X(:)
  1909. INTEGER, INTENT(IN) :: INDX(:)
  1910. COMPLEX(WP), INTENT(IN) :: Y(:)
  1911. END SUBROUTINE CGTHR_F95
  1912. PURE SUBROUTINE ZGTHR_F95(X,INDX,Y)
  1913. ! Fortran77 call:
  1914. ! ZGTHR(NZ,Y,X,INDX)
  1915. USE F95_PRECISION, ONLY: WP => DP
  1916. COMPLEX(WP), INTENT(OUT) :: X(:)
  1917. INTEGER, INTENT(IN) :: INDX(:)
  1918. COMPLEX(WP), INTENT(IN) :: Y(:)
  1919. END SUBROUTINE ZGTHR_F95
  1920. END INTERFACE GTHR
  1921. INTERFACE GTHRZ
  1922. PURE SUBROUTINE SGTHRZ_F95(X,INDX,Y)
  1923. ! Fortran77 call:
  1924. ! SGTHRZ(NZ,Y,X,INDX)
  1925. USE F95_PRECISION, ONLY: WP => SP
  1926. REAL(WP), INTENT(OUT) :: X(:)
  1927. INTEGER, INTENT(IN) :: INDX(:)
  1928. REAL(WP), INTENT(INOUT) :: Y(:)
  1929. END SUBROUTINE SGTHRZ_F95
  1930. PURE SUBROUTINE DGTHRZ_F95(X,INDX,Y)
  1931. ! Fortran77 call:
  1932. ! DGTHRZ(NZ,Y,X,INDX)
  1933. USE F95_PRECISION, ONLY: WP => DP
  1934. REAL(WP), INTENT(OUT) :: X(:)
  1935. INTEGER, INTENT(IN) :: INDX(:)
  1936. REAL(WP), INTENT(INOUT) :: Y(:)
  1937. END SUBROUTINE DGTHRZ_F95
  1938. PURE SUBROUTINE CGTHRZ_F95(X,INDX,Y)
  1939. ! Fortran77 call:
  1940. ! CGTHRZ(NZ,Y,X,INDX)
  1941. USE F95_PRECISION, ONLY: WP => SP
  1942. COMPLEX(WP), INTENT(OUT) :: X(:)
  1943. INTEGER, INTENT(IN) :: INDX(:)
  1944. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  1945. END SUBROUTINE CGTHRZ_F95
  1946. PURE SUBROUTINE ZGTHRZ_F95(X,INDX,Y)
  1947. ! Fortran77 call:
  1948. ! ZGTHRZ(NZ,Y,X,INDX)
  1949. USE F95_PRECISION, ONLY: WP => DP
  1950. COMPLEX(WP), INTENT(OUT) :: X(:)
  1951. INTEGER, INTENT(IN) :: INDX(:)
  1952. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  1953. END SUBROUTINE ZGTHRZ_F95
  1954. END INTERFACE GTHRZ
  1955. INTERFACE ROTI
  1956. ! Default C=1
  1957. ! Default S=1
  1958. PURE SUBROUTINE SROTI_F95(X,INDX,Y,C,S)
  1959. ! Fortran77 call:
  1960. ! SROTI(NZ,X,INDX,Y,C,S)
  1961. USE F95_PRECISION, ONLY: WP => SP
  1962. REAL(WP), INTENT(IN) :: C
  1963. REAL(WP), INTENT(IN) :: S
  1964. REAL(WP), INTENT(INOUT) :: X(:)
  1965. INTEGER, INTENT(IN) :: INDX(:)
  1966. REAL(WP), INTENT(IN) :: Y(:)
  1967. END SUBROUTINE SROTI_F95
  1968. PURE SUBROUTINE DROTI_F95(X,INDX,Y,C,S)
  1969. ! Fortran77 call:
  1970. ! DROTI(NZ,X,INDX,Y,C,S)
  1971. USE F95_PRECISION, ONLY: WP => DP
  1972. REAL(WP), INTENT(IN) :: C
  1973. REAL(WP), INTENT(IN) :: S
  1974. REAL(WP), INTENT(INOUT) :: X(:)
  1975. INTEGER, INTENT(IN) :: INDX(:)
  1976. REAL(WP), INTENT(IN) :: Y(:)
  1977. END SUBROUTINE DROTI_F95
  1978. END INTERFACE ROTI
  1979. INTERFACE SCTR
  1980. PURE SUBROUTINE SSCTR_F95(X,INDX,Y)
  1981. ! Fortran77 call:
  1982. ! SSCTR(NZ,X,INDX,Y)
  1983. USE F95_PRECISION, ONLY: WP => SP
  1984. REAL(WP), INTENT(IN) :: X(:)
  1985. INTEGER, INTENT(IN) :: INDX(:)
  1986. REAL(WP), INTENT(OUT) :: Y(:)
  1987. END SUBROUTINE SSCTR_F95
  1988. PURE SUBROUTINE DSCTR_F95(X,INDX,Y)
  1989. ! Fortran77 call:
  1990. ! DSCTR(NZ,X,INDX,Y)
  1991. USE F95_PRECISION, ONLY: WP => DP
  1992. REAL(WP), INTENT(IN) :: X(:)
  1993. INTEGER, INTENT(IN) :: INDX(:)
  1994. REAL(WP), INTENT(OUT) :: Y(:)
  1995. END SUBROUTINE DSCTR_F95
  1996. PURE SUBROUTINE CSCTR_F95(X,INDX,Y)
  1997. ! Fortran77 call:
  1998. ! CSCTR(NZ,X,INDX,Y)
  1999. USE F95_PRECISION, ONLY: WP => SP
  2000. COMPLEX(WP), INTENT(IN) :: X(:)
  2001. INTEGER, INTENT(IN) :: INDX(:)
  2002. COMPLEX(WP), INTENT(OUT) :: Y(:)
  2003. END SUBROUTINE CSCTR_F95
  2004. PURE SUBROUTINE ZSCTR_F95(X,INDX,Y)
  2005. ! Fortran77 call:
  2006. ! ZSCTR(NZ,X,INDX,Y)
  2007. USE F95_PRECISION, ONLY: WP => DP
  2008. COMPLEX(WP), INTENT(IN) :: X(:)
  2009. INTEGER, INTENT(IN) :: INDX(:)
  2010. COMPLEX(WP), INTENT(OUT) :: Y(:)
  2011. END SUBROUTINE ZSCTR_F95
  2012. END INTERFACE SCTR
  2013. INTERFACE GEMM3M
  2014. ! TRANSA='N','C','T'; default: 'N'
  2015. ! TRANSB='N','C','T'; default: 'N'
  2016. ! Default ALPHA=1
  2017. ! Default BETA=0
  2018. PURE SUBROUTINE CGEMM3M_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  2019. ! Fortran77 call:
  2020. ! CGEMM3M(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  2021. USE F95_PRECISION, ONLY: WP => SP
  2022. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  2023. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  2024. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2025. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2026. COMPLEX(WP), INTENT(IN) :: A(:,:)
  2027. COMPLEX(WP), INTENT(IN) :: B(:,:)
  2028. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  2029. END SUBROUTINE CGEMM3M_F95
  2030. PURE SUBROUTINE ZGEMM3M_F95(A,B,C,TRANSA,TRANSB,ALPHA,BETA)
  2031. ! Fortran77 call:
  2032. ! ZGEMM3M(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  2033. USE F95_PRECISION, ONLY: WP => DP
  2034. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSA
  2035. CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: TRANSB
  2036. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2037. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2038. COMPLEX(WP), INTENT(IN) :: A(:,:)
  2039. COMPLEX(WP), INTENT(IN) :: B(:,:)
  2040. COMPLEX(WP), INTENT(INOUT) :: C(:,:)
  2041. END SUBROUTINE ZGEMM3M_F95
  2042. END INTERFACE GEMM3M
  2043. INTERFACE AXPBY
  2044. ! Default ALPHA=1
  2045. ! Default BETA=1
  2046. PURE SUBROUTINE SAXPBY_F95(X,Y,ALPHA,BETA)
  2047. ! Fortran77 call:
  2048. ! SAXPBY(N,ALPHA,X,INCX,BETA,Y,INCY)
  2049. USE F95_PRECISION, ONLY: WP => SP
  2050. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  2051. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  2052. REAL(WP), INTENT(IN) :: X(:)
  2053. REAL(WP), INTENT(INOUT) :: Y(:)
  2054. END SUBROUTINE SAXPBY_F95
  2055. PURE SUBROUTINE DAXPBY_F95(X,Y,ALPHA,BETA)
  2056. ! Fortran77 call:
  2057. ! DAXPBY(N,ALPHA,X,INCX,BETA,Y,INCY)
  2058. USE F95_PRECISION, ONLY: WP => DP
  2059. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  2060. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  2061. REAL(WP), INTENT(IN) :: X(:)
  2062. REAL(WP), INTENT(INOUT) :: Y(:)
  2063. END SUBROUTINE DAXPBY_F95
  2064. PURE SUBROUTINE CAXPBY_F95(X,Y,ALPHA,BETA)
  2065. ! Fortran77 call:
  2066. ! CAXPBY(N,ALPHA,X,INCX,BETA,Y,INCY)
  2067. USE F95_PRECISION, ONLY: WP => SP
  2068. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2069. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2070. COMPLEX(WP), INTENT(IN) :: X(:)
  2071. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  2072. END SUBROUTINE CAXPBY_F95
  2073. PURE SUBROUTINE ZAXPBY_F95(X,Y,ALPHA,BETA)
  2074. ! Fortran77 call:
  2075. ! ZAXPBY(N,ALPHA,X,INCX,BETA,Y,INCY)
  2076. USE F95_PRECISION, ONLY: WP => DP
  2077. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2078. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2079. COMPLEX(WP), INTENT(IN) :: X(:)
  2080. COMPLEX(WP), INTENT(INOUT) :: Y(:)
  2081. END SUBROUTINE ZAXPBY_F95
  2082. END INTERFACE AXPBY
  2083. INTERFACE GEM2V
  2084. ! Default ALPHA=1
  2085. ! Default BETA=0
  2086. PURE SUBROUTINE SGEM2VU_F95(A,X1,X2,Y1,Y2,ALPHA,BETA)
  2087. ! Fortran77 call:
  2088. ! SGEM2VU(M,N,ALPHA,A,LDA,X1,INCX1,X2,INCX2,BETA,Y1,INCY1,Y2,
  2089. ! INCY2)
  2090. USE F95_PRECISION, ONLY: WP => SP
  2091. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  2092. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  2093. REAL(WP), INTENT(IN) :: A(:,:)
  2094. REAL(WP), INTENT(IN) :: X1(:)
  2095. REAL(WP), INTENT(IN) :: X2(:)
  2096. REAL(WP), INTENT(INOUT) :: Y1(:)
  2097. REAL(WP), INTENT(INOUT) :: Y2(:)
  2098. END SUBROUTINE SGEM2VU_F95
  2099. PURE SUBROUTINE DGEM2VU_F95(A,X1,X2,Y1,Y2,ALPHA,BETA)
  2100. ! Fortran77 call:
  2101. ! DGEM2VU(M,N,ALPHA,A,LDA,X1,INCX1,X2,INCX2,BETA,Y1,INCY1,Y2,
  2102. ! INCY2)
  2103. USE F95_PRECISION, ONLY: WP => DP
  2104. REAL(WP), INTENT(IN), OPTIONAL :: ALPHA
  2105. REAL(WP), INTENT(IN), OPTIONAL :: BETA
  2106. REAL(WP), INTENT(IN) :: A(:,:)
  2107. REAL(WP), INTENT(IN) :: X1(:)
  2108. REAL(WP), INTENT(IN) :: X2(:)
  2109. REAL(WP), INTENT(INOUT) :: Y1(:)
  2110. REAL(WP), INTENT(INOUT) :: Y2(:)
  2111. END SUBROUTINE DGEM2VU_F95
  2112. PURE SUBROUTINE CGEM2VC_F95(A,X1,X2,Y1,Y2,ALPHA,BETA)
  2113. ! Fortran77 call:
  2114. ! CGEM2VC(M,N,ALPHA,A,LDA,X1,INCX1,X2,INCX2,BETA,Y1,INCY1,Y2,
  2115. ! INCY2)
  2116. USE F95_PRECISION, ONLY: WP => SP
  2117. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2118. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2119. COMPLEX(WP), INTENT(IN) :: A(:,:)
  2120. COMPLEX(WP), INTENT(IN) :: X1(:)
  2121. COMPLEX(WP), INTENT(IN) :: X2(:)
  2122. COMPLEX(WP), INTENT(INOUT) :: Y1(:)
  2123. COMPLEX(WP), INTENT(INOUT) :: Y2(:)
  2124. END SUBROUTINE CGEM2VC_F95
  2125. PURE SUBROUTINE ZGEM2VC_F95(A,X1,X2,Y1,Y2,ALPHA,BETA)
  2126. ! Fortran77 call:
  2127. ! ZGEM2VC(M,N,ALPHA,A,LDA,X1,INCX1,X2,INCX2,BETA,Y1,INCY1,Y2,
  2128. ! INCY2)
  2129. USE F95_PRECISION, ONLY: WP => DP
  2130. COMPLEX(WP), INTENT(IN), OPTIONAL :: ALPHA
  2131. COMPLEX(WP), INTENT(IN), OPTIONAL :: BETA
  2132. COMPLEX(WP), INTENT(IN) :: A(:,:)
  2133. COMPLEX(WP), INTENT(IN) :: X1(:)
  2134. COMPLEX(WP), INTENT(IN) :: X2(:)
  2135. COMPLEX(WP), INTENT(INOUT) :: Y1(:)
  2136. COMPLEX(WP), INTENT(INOUT) :: Y2(:)
  2137. END SUBROUTINE ZGEM2VC_F95
  2138. END INTERFACE GEM2V
  2139. INTERFACE SGEMM_BATCH
  2140. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2141. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2142. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2143. ! BETA_ARRAY=Array of beta values; default: 0
  2144. PURE SUBROUTINE SGEMM_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2145. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2146. ! Fortran77 call:
  2147. ! SGEMM_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2148. USE F95_PRECISION, ONLY: WP => SP
  2149. USE, INTRINSIC :: ISO_C_BINDING
  2150. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2151. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2152. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2153. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2154. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2155. REAL(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2156. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2157. REAL(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2158. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2159. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2160. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2161. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2162. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2163. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2164. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2165. END SUBROUTINE SGEMM_BATCH_F95
  2166. END INTERFACE SGEMM_BATCH
  2167. INTERFACE DGEMM_BATCH
  2168. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2169. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2170. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2171. ! BETA_ARRAY=Array of beta values; default: 0
  2172. PURE SUBROUTINE DGEMM_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2173. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2174. ! Fortran77 call:
  2175. ! DGEMM_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2176. USE F95_PRECISION, ONLY: WP => DP
  2177. USE, INTRINSIC :: ISO_C_BINDING
  2178. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2179. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2180. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2181. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2182. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2183. REAL(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2184. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2185. REAL(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2186. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2187. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2188. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2189. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2190. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2191. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2192. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2193. END SUBROUTINE DGEMM_BATCH_F95
  2194. END INTERFACE DGEMM_BATCH
  2195. INTERFACE CGEMM_BATCH
  2196. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2197. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2198. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2199. ! BETA_ARRAY=Array of beta values; default: 0
  2200. PURE SUBROUTINE CGEMM_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2201. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2202. ! Fortran77 call:
  2203. ! CGEMM_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2204. USE F95_PRECISION, ONLY: WP => SP
  2205. USE, INTRINSIC :: ISO_C_BINDING
  2206. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2207. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2208. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2209. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2210. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2211. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2212. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2213. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2214. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2215. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2216. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2217. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2218. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2219. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2220. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2221. END SUBROUTINE CGEMM_BATCH_F95
  2222. END INTERFACE CGEMM_BATCH
  2223. INTERFACE ZGEMM_BATCH
  2224. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2225. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2226. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2227. ! BETA_ARRAY=Array of beta values; default: 0
  2228. PURE SUBROUTINE ZGEMM_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2229. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2230. ! Fortran77 call:
  2231. ! ZGEMM_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2232. USE F95_PRECISION, ONLY: WP => DP
  2233. USE, INTRINSIC :: ISO_C_BINDING
  2234. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2235. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2236. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2237. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2238. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2239. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2240. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2241. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2242. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2243. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2244. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2245. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2246. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2247. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2248. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2249. END SUBROUTINE ZGEMM_BATCH_F95
  2250. END INTERFACE ZGEMM_BATCH
  2251. INTERFACE CGEMM3M_BATCH
  2252. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2253. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2254. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2255. ! BETA_ARRAY=Array of beta values; default: 0
  2256. PURE SUBROUTINE CGEMM3M_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2257. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2258. ! Fortran77 call:
  2259. ! CGEMM3M_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2260. USE F95_PRECISION, ONLY: WP => SP
  2261. USE, INTRINSIC :: ISO_C_BINDING
  2262. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2263. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2264. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2265. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2266. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2267. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2268. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2269. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2270. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2271. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2272. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2273. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2274. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2275. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2276. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2277. END SUBROUTINE CGEMM3M_BATCH_F95
  2278. END INTERFACE CGEMM3M_BATCH
  2279. INTERFACE ZGEMM3M_BATCH
  2280. ! TRANSA_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2281. ! TRANSB_ARRAY=Array where each element is one of 'N','C','T'; default: 'N'
  2282. ! ALPHA_ARRAY=Array of alpha values; default: 1
  2283. ! BETA_ARRAY=Array of beta values; default: 0
  2284. PURE SUBROUTINE ZGEMM3M_BATCH_F95(A_ARRAY,B_ARRAY,C_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY, &
  2285. GROUP_SIZE,TRANSA_ARRAY,TRANSB_ARRAY,ALPHA_ARRAY,BETA_ARRAY)
  2286. ! Fortran77 call:
  2287. ! ZGEMM3M_BATCH(TRANSA_ARRAY,TRANSB_ARRAY,M_ARRAY,N_ARRAY,K_ARRAY,ALPHA_ARRAY,A_ARRAY,LDA_ARRAY,B_ARRAY,LDB_ARRAY,BETA_ARRAY,C_ARRAY,LDC_ARRAY,GROUP_COUNT,GROUP_SIZE)
  2288. USE F95_PRECISION, ONLY: WP => DP
  2289. USE, INTRINSIC :: ISO_C_BINDING
  2290. ! TRANSA_ARRAY: INOUT intent instead of IN because PURE.
  2291. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSA_ARRAY(:)
  2292. ! TRANSB_ARRAY: INOUT intent instead of IN because PURE.
  2293. CHARACTER(LEN=1), INTENT(INOUT), OPTIONAL :: TRANSB_ARRAY(:)
  2294. ! ALPHA_ARRAY: INOUT intent instead of IN because PURE.
  2295. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: ALPHA_ARRAY(:)
  2296. ! BETA_ARRAY: INOUT intent instead of IN because PURE.
  2297. COMPLEX(WP), INTENT(INOUT), OPTIONAL :: BETA_ARRAY(:)
  2298. INTEGER, INTENT(IN) :: M_ARRAY(:)
  2299. INTEGER, INTENT(IN) :: N_ARRAY(:)
  2300. INTEGER, INTENT(IN) :: K_ARRAY(:)
  2301. INTEGER, INTENT(IN) :: GROUP_SIZE(:)
  2302. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: A_ARRAY(:)
  2303. INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: B_ARRAY(:)
  2304. INTEGER(KIND=C_INTPTR_T), INTENT(INOUT) :: C_ARRAY(:)
  2305. END SUBROUTINE ZGEMM3M_BATCH_F95
  2306. END INTERFACE ZGEMM3M_BATCH
  2307. END MODULE BLAS95