Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d134ca0070 | ||
|
|
525fccc323 | ||
|
|
51b349470b | ||
|
|
5c2c24f547 | ||
|
|
a2d651f8f0 | ||
|
|
ed5f25bb22 | ||
|
|
f556d04306 | ||
|
|
aa622d1183 | ||
|
|
3705542eac | ||
|
|
f0f3e5f9a8 | ||
|
|
0a70a8c212 | ||
|
|
e273ca7370 | ||
|
|
538cf81a3a | ||
|
|
b7667ec54d | ||
|
|
6d0ac95f50 | ||
|
|
fad42f8ece | ||
|
|
f955756bf5 | ||
|
|
cdb89685bd | ||
|
|
9b124563b8 | ||
|
|
018bf9f330 | ||
|
|
28457943b3 | ||
|
|
947e0afc63 | ||
|
|
7e1c743aef | ||
|
|
cf47d31736 | ||
|
|
ab2a097f93 | ||
|
|
12879438bd | ||
|
|
92dd179c2b | ||
|
|
fb9b904cc2 | ||
|
|
c3b628bfd7 | ||
|
|
e5757e68ee | ||
|
|
ff94382e72 | ||
|
|
4b40962a13 | ||
|
|
25fa8f2f6b | ||
|
|
c08a083be7 | ||
|
|
48d198aadb | ||
|
|
54964f8f88 | ||
|
|
fdc78becbc | ||
|
|
6e157dd062 | ||
|
|
a88a328c9f | ||
|
|
8250cb5ce2 | ||
|
|
1be34149cb | ||
|
|
6d6643bdb5 | ||
|
|
f0b01be34a | ||
|
|
d270dac898 | ||
|
|
745782750e | ||
|
|
b22eed6a58 | ||
|
|
054422e6d3 | ||
|
|
c56597bfbf | ||
|
|
8bcfbf8d33 | ||
|
|
a3e6a89dd6 | ||
|
|
9429724146 | ||
|
|
ca1e0166df | ||
|
|
447a75e381 | ||
|
|
3cd79c329f | ||
|
|
6c493e6508 | ||
|
|
e2fd85389f | ||
|
|
bfadf61f2f | ||
|
|
2ba64b0003 | ||
|
|
58cff20b27 | ||
|
|
6737170823 | ||
|
|
e2a3ec48ec | ||
|
|
f754f09454 | ||
|
|
c749e19a2f | ||
|
|
cf265acf5a | ||
|
|
01218ae45d | ||
|
|
cea993b201 | ||
|
|
1fdd793af9 | ||
|
|
b730744392 | ||
|
|
7a7d7453ed | ||
|
|
d8b427ad63 | ||
|
|
467bb93f7e | ||
|
|
e073bf5f0a | ||
|
|
b11f5bd89d | ||
|
|
a23bdceb22 | ||
|
|
ef0747856e | ||
|
|
f3a91b74f6 | ||
|
|
549f4a6299 | ||
|
|
b904bef7ea | ||
|
|
81d28e7b13 | ||
|
|
7093b0e439 | ||
|
|
651fe14d01 | ||
|
|
99fe793bc0 | ||
|
|
9324991fa7 | ||
|
|
14398a8125 | ||
|
|
1ffc7344b0 | ||
|
|
4ff99a6b8f | ||
|
|
3a33d2ea37 | ||
|
|
8caa798f9a | ||
|
|
30cb700441 | ||
|
|
d12f7ad148 | ||
|
|
4fc8389ed9 | ||
|
|
7d732a4c54 | ||
|
|
3b108cbd6a | ||
|
|
f012b82fd9 | ||
|
|
c1c5b726be | ||
|
|
1954919f2f | ||
|
|
bceadf3238 | ||
|
|
ee81e65267 | ||
|
|
379b30d311 | ||
|
|
31a1d7844b | ||
|
|
06060fb7f6 | ||
|
|
212bf98263 | ||
|
|
5b484b2ae5 | ||
|
|
0e9dea7351 | ||
|
|
693f114224 | ||
|
|
e0b72f6a9f | ||
|
|
1068fdbe9c | ||
|
|
7551f87f5e | ||
|
|
d62eebccd4 | ||
|
|
9e55d36949 | ||
|
|
c0b35f8a83 | ||
|
|
ee358af929 | ||
|
|
6bf019efd1 | ||
|
|
05a6d9f4e9 | ||
|
|
9cf8bd2378 | ||
|
|
76bb13e396 | ||
|
|
114140a8ba | ||
|
|
ba20cd239b | ||
|
|
acff87b05a | ||
|
|
c9e94a06c5 | ||
|
|
6e7b86cda4 | ||
|
|
ce673d064d | ||
|
|
b8607fe70f | ||
|
|
301097afd8 | ||
|
|
e8785e4e1e | ||
|
|
38ccf80859 | ||
|
|
f0aaa58e14 | ||
|
|
b7c0841b09 | ||
|
|
552873f0a9 | ||
|
|
36c931cac2 | ||
|
|
d1e64796ed | ||
|
|
6840252146 | ||
|
|
fc09e73853 | ||
|
|
46b06d80b6 | ||
|
|
fff42b8aeb | ||
|
|
3a30b715ff | ||
|
|
9e64af6288 | ||
|
|
98e5d7a237 | ||
|
|
77abd25204 | ||
|
|
683f28cd41 | ||
|
|
122f8924ed | ||
|
|
b7966d4acd | ||
|
|
0f819939d2 | ||
|
|
3e177d2306 | ||
|
|
966a012664 | ||
|
|
bfd0a585c9 | ||
|
|
b962ce0d84 | ||
|
|
4c6ffa55b3 | ||
|
|
063ccf0a1d | ||
|
|
390567a6fd | ||
|
|
1f7b0760a9 | ||
|
|
ad435c2ad3 | ||
|
|
fbd4146ce5 | ||
|
|
1b2cbb7649 | ||
|
|
048d12f150 | ||
|
|
21af89cef0 | ||
|
|
e938bbbe24 | ||
|
|
f5340708e6 | ||
|
|
192037884c | ||
|
|
078d8978db | ||
|
|
fd8e6db995 | ||
|
|
d5dbabe3f5 | ||
|
|
23b489104f | ||
|
|
a73f4a6524 | ||
|
|
05628e3e0d | ||
|
|
6649f3999f | ||
|
|
72b151245e | ||
|
|
ed7d20cd23 | ||
|
|
077667a1be | ||
|
|
0ce0f75f76 | ||
|
|
fd020b441b | ||
|
|
0e0f23592e | ||
|
|
92ef3aaeb8 | ||
|
|
3ecbd1d097 | ||
|
|
6e88a11703 | ||
|
|
283cf5b76d | ||
|
|
91c0f61b87 | ||
|
|
6dc1a78eae | ||
|
|
526a4fbbd3 | ||
|
|
3d668fe93f | ||
|
|
fd16118505 | ||
|
|
7a721b3fac | ||
|
|
d296703051 | ||
|
|
8a43b6869a | ||
|
|
ea7f51048f | ||
|
|
54b6620d27 | ||
|
|
5a4f0955d4 | ||
|
|
3227cca8d8 | ||
|
|
250e3fde67 | ||
|
|
966342e40d | ||
|
|
d12b2bd748 | ||
|
|
ccb2daf5fd | ||
|
|
626a56e75f | ||
|
|
e07a5fe438 | ||
|
|
f6dff25c8c | ||
|
|
c77af53968 | ||
|
|
a66e2a37c4 | ||
|
|
040441d824 | ||
|
|
f36ff17acf | ||
|
|
7e4e6bf07e | ||
|
|
8515a319e7 | ||
|
|
40abea27f7 | ||
|
|
c0e868327e | ||
|
|
db9aa259c7 | ||
|
|
5da24275b9 | ||
|
|
83fdf63e7f | ||
|
|
778a5370b1 | ||
|
|
1ccf4a6640 | ||
|
|
7fbc3e7bb0 | ||
|
|
ce313deecd | ||
|
|
57e7ee9724 | ||
|
|
a3b6a89b5f | ||
|
|
0232856846 | ||
|
|
d653fbe98a | ||
|
|
fb2905ff94 | ||
|
|
c131da97cb | ||
|
|
46ec5a4b1c | ||
|
|
9549c351ba | ||
|
|
f9ade3eade | ||
|
|
9bbf60ca45 | ||
|
|
acdcf84b5c | ||
|
|
e4dac9573a | ||
|
|
b9ee49b63d | ||
|
|
04643e103e | ||
|
|
67c7c8ac05 | ||
|
|
e014d6ce59 | ||
|
|
971961bd21 | ||
|
|
f51069fa5e | ||
|
|
5da5348aa0 | ||
|
|
382c275cb1 | ||
|
|
a2303521f8 | ||
|
|
6e881c3dce | ||
|
|
6d7772085a | ||
|
|
62b2396d7b | ||
|
|
b172f0b839 | ||
|
|
34fffb77e7 | ||
|
|
effffd0f9a | ||
|
|
12711abd19 | ||
|
|
151acca477 | ||
|
|
4543266101 | ||
|
|
fd5303c002 | ||
|
|
ceb69d600f | ||
|
|
ea1b145b04 | ||
|
|
ead2f6c8b3 | ||
|
|
f038bec2de | ||
|
|
e830eed287 | ||
|
|
b4a0548f94 | ||
|
|
05fc5d31f2 | ||
|
|
d5f8b88837 | ||
|
|
0e096623f2 | ||
|
|
d6b82864ed | ||
|
|
eed4e74fcb | ||
|
|
6af853258b | ||
|
|
9c3d06a1b6 | ||
|
|
656fbeb7a3 | ||
|
|
01b6937a37 | ||
|
|
5c1c526b52 | ||
|
|
95f751d9e0 | ||
|
|
0346d21074 | ||
|
|
24e0eafe29 | ||
|
|
0a260664a9 | ||
|
|
bd16e52268 | ||
|
|
b6c54a758f | ||
|
|
26a38b10fb | ||
|
|
5a79404258 | ||
|
|
9524bb79f0 | ||
|
|
de3200808f | ||
|
|
0fdfcd6e8a | ||
|
|
3e31f5a146 | ||
|
|
fdee741c8a | ||
|
|
275bc4c7b3 | ||
|
|
a32aa4b33d | ||
|
|
531e611e92 | ||
|
|
a59517ba04 | ||
|
|
932ae47213 | ||
|
|
84ec80d3c4 | ||
|
|
8cd9026676 | ||
|
|
71bf5ec123 | ||
|
|
20318b7f72 | ||
|
|
b4ba901b29 | ||
|
|
7872e2d6e6 | ||
|
|
b8c9a988df | ||
|
|
d4fbf36e37 | ||
|
|
a6c1fd8083 | ||
|
|
d31bf01141 | ||
|
|
80b4f5328f | ||
|
|
2eaac71bfd | ||
|
|
b92efb680a | ||
|
|
530d74ca35 | ||
|
|
01ad09c38b | ||
|
|
76dee5d357 | ||
|
|
d620756357 | ||
|
|
e18912f647 | ||
|
|
5a687f4922 | ||
|
|
7cca0ea223 | ||
|
|
1092f35f41 | ||
|
|
cd40e85a40 | ||
|
|
3afa8276ef | ||
|
|
40f50c003e | ||
|
|
2dc6a54930 | ||
|
|
c90d404e5f | ||
|
|
b26a74e496 | ||
|
|
9c27a24524 | ||
|
|
83a7af2acd | ||
|
|
f6574307ed | ||
|
|
ed5b8231df | ||
|
|
7940afb9f9 | ||
|
|
1612cd6768 | ||
|
|
b05e6148ad | ||
|
|
1cbb16845e | ||
|
|
45e761e1a8 | ||
|
|
adcce9c91c | ||
|
|
20044bbd95 | ||
|
|
2328018b6a | ||
|
|
1bc5d3a9ec | ||
|
|
8d8df56471 | ||
|
|
c59b28a9d1 | ||
|
|
8bcbf5d7ca | ||
|
|
8d8625a502 | ||
|
|
8834606520 | ||
|
|
59a4d448f0 | ||
|
|
f484d0ef41 | ||
|
|
793ab6b649 | ||
|
|
43764cd0bc | ||
|
|
a466518dea | ||
|
|
7d2bfce176 | ||
|
|
8a1ae32a4c | ||
|
|
d1d33467ee | ||
|
|
1f86b23382 | ||
|
|
58c4bc1d30 | ||
|
|
5e1838bed7 | ||
|
|
fd686cd6b9 | ||
|
|
f4ba39a0ab | ||
|
|
c2340cf803 | ||
|
|
de2f9be7f8 | ||
|
|
6faf643a39 | ||
|
|
5969737ba1 | ||
|
|
968119f2bb | ||
|
|
ce5b69cbf0 | ||
|
|
4a6c2b11b9 | ||
|
|
de15f6a8bd | ||
|
|
09e8a7b317 | ||
|
|
88dc26084d | ||
|
|
5276a67314 | ||
|
|
a53ab62307 | ||
|
|
9aed94de6d | ||
|
|
eb4f2b1d7f | ||
|
|
cb988d7863 | ||
|
|
f6fb1114ab | ||
|
|
11b673cf82 | ||
|
|
c537b6b5d3 | ||
|
|
bb2bda9ed3 | ||
|
|
c1afcaef18 | ||
|
|
6a1be421a1 | ||
|
|
9def0ea171 | ||
|
|
46604b2708 | ||
|
|
a52fb44456 | ||
|
|
14f3af6976 | ||
|
|
1c493c4c5b | ||
|
|
c21b6a6754 | ||
|
|
d811e37cb1 | ||
|
|
ff3f98214f | ||
|
|
820ef1d794 | ||
|
|
25d74b31a7 | ||
|
|
8380fe2c40 | ||
|
|
dd5d8da796 | ||
|
|
7f8ab7bfac | ||
|
|
88e91a5f23 | ||
|
|
e3a0a153db | ||
|
|
e73e1b0715 | ||
|
|
059442bcf7 | ||
|
|
f3f65e386b | ||
|
|
3af8533300 | ||
|
|
1ece76f528 | ||
|
|
b21e888fb3 | ||
|
|
7de15adde6 | ||
|
|
5506815863 | ||
|
|
8db5d4774b | ||
|
|
4c99ae7661 | ||
|
|
caf8581367 | ||
|
|
926e28e16c | ||
|
|
b7445a3f93 | ||
|
|
5478f985ad | ||
|
|
d35cd9a296 | ||
|
|
774b05d15d | ||
|
|
68d8fba5c1 | ||
|
|
944e920ac6 | ||
|
|
6c4efb0307 | ||
|
|
bb1afab469 | ||
|
|
077a97f9d7 | ||
|
|
ed4d486f65 | ||
|
|
a884b29254 | ||
|
|
d3388ade69 | ||
|
|
9130566c33 | ||
|
|
d6bd7e3f4e | ||
|
|
1ed1f080da | ||
|
|
ac82605ea9 | ||
|
|
0843d3ed4b | ||
|
|
c550a3638b | ||
|
|
64e47cf7e2 | ||
|
|
7689fc123b | ||
|
|
6ce7d80602 | ||
|
|
9168094c89 | ||
|
|
8d54a91fee | ||
|
|
e7b6349d39 | ||
|
|
dc69275836 | ||
|
|
e67e3b47d2 | ||
|
|
d6bf599fd7 | ||
|
|
ea65bb77ba | ||
|
|
034ada14fa | ||
|
|
2ec774a2f6 | ||
|
|
a22074819d | ||
|
|
89791177a7 | ||
|
|
1d7b5c10a5 | ||
|
|
4f84ecc5ca | ||
|
|
95640a9031 | ||
|
|
f954f62cd1 | ||
|
|
8104c32fe8 | ||
|
|
ac573b73bb | ||
|
|
92ca29dc64 | ||
|
|
33ec2a652c | ||
|
|
3aba0da0db | ||
|
|
a4641a28a5 | ||
|
|
ca938b93df | ||
|
|
4486765327 | ||
|
|
2f098d0fbe | ||
|
|
dd3608ade7 | ||
|
|
7a5f0f890f | ||
|
|
0dddb40aaf | ||
|
|
93f72dd1f7 | ||
|
|
c806564313 | ||
|
|
7f4dff6336 | ||
|
|
8b52b5e82f | ||
|
|
8fa1db366b | ||
|
|
10d120966e | ||
|
|
b760323bc5 | ||
|
|
eb5f719947 | ||
|
|
a52f5fa69d | ||
|
|
c6e6948e8f | ||
|
|
4e013d710c | ||
|
|
989ffdd779 | ||
|
|
8b1494be8c | ||
|
|
7f18edae13 | ||
|
|
5dfd515e90 | ||
|
|
6fe88c7ac8 | ||
|
|
94f05be6c3 | ||
|
|
c2023d8f93 | ||
|
|
4f13bb0d6c | ||
|
|
bdbce3ebd3 | ||
|
|
caea640080 | ||
|
|
15b48d2e5b | ||
|
|
8fc7d537b1 | ||
|
|
4f1773e766 | ||
|
|
507c1dd7c9 | ||
|
|
58ba032b06 | ||
|
|
fa23a2dc2d | ||
|
|
00cf62bc1b | ||
|
|
97567d934d | ||
|
|
6c5bc6ac65 | ||
|
|
ecac9d22f7 | ||
|
|
15f395c678 | ||
|
|
caab666dd4 | ||
|
|
b6b6288080 | ||
|
|
39c3a5083d | ||
|
|
be99d8943c | ||
|
|
aca0bc17e7 | ||
|
|
c0c64400da | ||
|
|
7d2118331c | ||
|
|
76a3a41e70 | ||
|
|
4327756d94 | ||
|
|
eeed198193 | ||
|
|
583e0e289f | ||
|
|
daed92441d | ||
|
|
54817e9385 | ||
|
|
8856fad0cf | ||
|
|
3bd8b3124b | ||
|
|
794b0ba0ab | ||
|
|
1ff794a959 | ||
|
|
3497aaae88 | ||
|
|
67f9279da4 | ||
|
|
75248ffe0d | ||
|
|
97c0e32f36 | ||
|
|
2b2879eef7 | ||
|
|
efe84a130d | ||
|
|
5a22051d73 | ||
|
|
8492fc3cc7 | ||
|
|
d8a000d4ff | ||
|
|
fc2a4fd659 | ||
|
|
bf486fecc0 | ||
|
|
06f5ba3143 | ||
|
|
8d44c30685 | ||
|
|
54726b8177 | ||
|
|
cbaf8d377f | ||
|
|
3833d89e01 | ||
|
|
b01d1b213b | ||
|
|
de15bcca59 | ||
|
|
d5026069ba | ||
|
|
548f62369e | ||
|
|
9f4032ec97 | ||
|
|
968b45006b | ||
|
|
24534338bd | ||
|
|
fb80127153 | ||
|
|
48677eea06 | ||
|
|
7014148a5b | ||
|
|
dd076164da | ||
|
|
746f7afb2b | ||
|
|
6529fc14bc | ||
|
|
87d679164c | ||
|
|
9ea006008e | ||
|
|
81c48a0a3a | ||
|
|
68a1389c4b | ||
|
|
b9d53f4c5c | ||
|
|
0de6ae0fc4 | ||
|
|
c08dcfa106 | ||
|
|
b36b9b76eb | ||
|
|
df8c7393af | ||
|
|
4619f613cd | ||
|
|
9630b23c4f | ||
|
|
362029e383 | ||
|
|
d2d2625019 | ||
|
|
3c9f92b391 | ||
|
|
66380df1ca | ||
|
|
6b92a7affa | ||
|
|
3c59d1725d | ||
|
|
b4cf815965 | ||
|
|
44d9a1636b | ||
|
|
593f69fc0c | ||
|
|
a0e44d7434 | ||
|
|
b73a7c9e4d | ||
|
|
3c1abe4166 | ||
|
|
d0b1591e28 | ||
|
|
594dc253ae | ||
|
|
83ed564b46 | ||
|
|
ce817407f3 | ||
|
|
62b1d4a032 | ||
|
|
971f19940e | ||
|
|
04bb0de13a | ||
|
|
f111b2dc42 | ||
|
|
8caa3ff67b | ||
|
|
4c76e9deb6 | ||
|
|
b23d944046 | ||
|
|
97b0bedb32 | ||
|
|
5ce7a26f49 | ||
|
|
bfbef596de | ||
|
|
f721480b2e | ||
|
|
426641c372 | ||
|
|
881bf80d44 | ||
|
|
e3951fbc25 | ||
|
|
fa6a30b24e | ||
|
|
7f5bcbbd07 | ||
|
|
9af1f59df5 | ||
|
|
146da1d409 | ||
|
|
5bde1cd38e | ||
|
|
6fa7bf69d1 | ||
|
|
e6eeebd789 | ||
|
|
98f34fd3c9 | ||
|
|
2d56b7e6a2 | ||
|
|
ecbbecd48a | ||
|
|
fd9092e9b7 | ||
|
|
c4ca73c6f2 | ||
|
|
7c8604c550 | ||
|
|
fd0ebf6cd4 | ||
|
|
319d40ec15 | ||
|
|
efbd2fdf44 | ||
|
|
caf674f0d2 | ||
|
|
d1f15f53c4 | ||
|
|
49ff1770ef | ||
|
|
ea67169477 | ||
|
|
0ab775d65b | ||
|
|
52a9434793 | ||
|
|
0918f47cbd | ||
|
|
25802f27dd | ||
|
|
14df73a8c6 | ||
|
|
18587a4169 | ||
|
|
fd138de5e5 | ||
|
|
709a34bb95 | ||
|
|
8b24458ab6 | ||
|
|
aed00bf394 | ||
|
|
8282ae9688 | ||
|
|
4758c863f5 | ||
|
|
b5b4661ba8 | ||
|
|
1a92dcac7c | ||
|
|
2475f7b391 | ||
|
|
d72484317a | ||
|
|
76ce5053f4 | ||
|
|
4ac1c6922e | ||
|
|
8f2d86aff6 | ||
|
|
88f65d66b5 | ||
|
|
b054023bcd | ||
|
|
c1c39a8a14 | ||
|
|
3e9035955f | ||
|
|
a077ce6f53 | ||
|
|
fc067149ee | ||
|
|
dbc45f746f | ||
|
|
506f2b3541 | ||
|
|
72df25ba80 | ||
|
|
3610ceb837 | ||
|
|
ea84abe35f | ||
|
|
d70c8c040d | ||
|
|
e338bb87e1 | ||
|
|
e3a48809c8 | ||
|
|
50dc1bf238 | ||
|
|
3c32809d15 | ||
|
|
97bc2e3134 | ||
|
|
ca82e5ea5c | ||
|
|
39523862cd | ||
|
|
6b1827041f | ||
|
|
4c637b8329 | ||
|
|
a00531096f | ||
|
|
59f136760f | ||
|
|
447fd4e784 | ||
|
|
3c209c6bdf | ||
|
|
bc0c38f247 | ||
|
|
304fa305e8 | ||
|
|
5f79137150 | ||
|
|
7ad40db8ba | ||
|
|
ba83427c03 | ||
|
|
31cd658cbd | ||
|
|
0799b59571 | ||
|
|
cf2c4402e9 | ||
|
|
3e242fc8d5 | ||
|
|
f5103fc3b4 | ||
|
|
3aa877584b | ||
|
|
6ec7f2bc4e | ||
|
|
7b4c3a3e10 | ||
|
|
1b0c6a7a05 | ||
|
|
e7d27c7a6c | ||
|
|
487c60ac55 | ||
|
|
29dbac94c3 | ||
|
|
e9b05ef6e9 | ||
|
|
db48820da7 | ||
|
|
d4741c8a57 | ||
|
|
273ab49035 | ||
|
|
354a16f22f | ||
|
|
a6c1dd6ce8 | ||
|
|
0e4c25b00e | ||
|
|
37e4061ec4 | ||
|
|
76361efae0 | ||
|
|
97e39473f3 | ||
|
|
494425c908 | ||
|
|
97c7845511 | ||
|
|
47f3d2ae07 | ||
|
|
3f9b12c4ca | ||
|
|
dadd80e753 | ||
|
|
2534b59e31 | ||
|
|
60c66af71b | ||
|
|
3065ee8667 | ||
|
|
828db43a7c | ||
|
|
9128e2051a | ||
|
|
747d971136 | ||
|
|
46e8388218 | ||
|
|
1573c82754 | ||
|
|
09cb849a23 | ||
|
|
1ba075ccd8 | ||
|
|
b966220510 | ||
|
|
298804e738 | ||
|
|
13aab4adf0 | ||
|
|
54956283e2 | ||
|
|
212270836b | ||
|
|
4490848058 | ||
|
|
d1f787c82b | ||
|
|
1221bb2595 | ||
|
|
18d002a32a | ||
|
|
f21a6aefd2 | ||
|
|
4b9693f8f1 | ||
|
|
c571921241 | ||
|
|
ad70e7218f | ||
|
|
6cdf7bc3a4 | ||
|
|
8785529fae | ||
|
|
6a53243490 | ||
|
|
7fdd3469c7 | ||
|
|
8a338cf2ba | ||
|
|
3005571c18 | ||
|
|
c8199998a6 | ||
|
|
116393587c |
+10
-4
@@ -15,22 +15,28 @@ environment:
|
|||||||
global:
|
global:
|
||||||
CONDA_INSTALL_LOCN: C:\\Miniconda37-x64
|
CONDA_INSTALL_LOCN: C:\\Miniconda37-x64
|
||||||
CTEST_OUTPUT_ON_FAILURE: 1
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
matrix:
|
||||||
|
- BUILD_DEFAULT_API: "ON"
|
||||||
|
BUILD_INDEX64_EXT_API: "OFF"
|
||||||
|
- BUILD_DEFAULT_API: "OFF"
|
||||||
|
BUILD_INDEX64_EXT_API: "ON"
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- call %CONDA_INSTALL_LOCN%\Scripts\activate.bat
|
- call %CONDA_INSTALL_LOCN%\Scripts\activate.bat
|
||||||
# - conda config --set auto_update_conda false
|
# - conda config --set auto_update_conda false
|
||||||
- conda install -c conda-forge --yes --quiet flang=11.0.1 jom
|
- conda install -c conda-forge --yes --quiet flang flang-rt_win-64 cmake ninja
|
||||||
- call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
|
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
|
||||||
- set "LIB=%CONDA_INSTALL_LOCN%\Library\lib;%LIB%"
|
- set "LIB=%CONDA_INSTALL_LOCN%\Library\lib;%LIB%"
|
||||||
- set "CPATH=%CONDA_INSTALL_LOCN%\Library\include;%CPATH%"
|
- set "CPATH=%CONDA_INSTALL_LOCN%\Library\include;%CPATH%"
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- ps: if (-Not (Test-Path .\build)) { mkdir build }
|
- ps: if (-Not (Test-Path .\build)) { mkdir build }
|
||||||
- cd build
|
- cd build
|
||||||
- cmake -G "NMake Makefiles JOM" -DCMAKE_Fortran_COMPILER=flang -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON ..
|
- cmake -G "Ninja" -DCMAKE_Fortran_COMPILER=flang -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DCBLAS=ON -DLAPACKE=ON -DLAPACKE_WITH_TMG=ON -DBUILD_DEFAULT_API=%BUILD_DEFAULT_API% -DBUILD_INDEX64_EXT_API=%BUILD_INDEX64_EXT_API% ..
|
||||||
|
# - cmake -G "NMake Makefiles JOM" -DCMAKE_Fortran_COMPILER=flang -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON ..
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmake --build .
|
- cmake --build .
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- ctest -j2
|
- ctest -j2 --output-on-failure
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using BinaryBuilder, Pkg
|
||||||
|
|
||||||
|
haskey(ENV, "BLAS_LAPACK_RELEASE") || error("The environment variable BLAS_LAPACK_RELEASE is not defined.")
|
||||||
|
haskey(ENV, "BLAS_LAPACK_COMMIT") || error("The environment variable BLAS_LAPACK_COMMIT is not defined.")
|
||||||
|
haskey(ENV, "BLAS_LAPACK_URL") || error("The environment variable BLAS_LAPACK_URL is not defined.")
|
||||||
|
|
||||||
|
name = "blas_lapack"
|
||||||
|
version = VersionNumber(ENV["BLAS_LAPACK_RELEASE"])
|
||||||
|
|
||||||
|
# Collection of sources required to complete build
|
||||||
|
sources = [
|
||||||
|
GitSource(ENV["BLAS_LAPACK_URL"], ENV["BLAS_LAPACK_COMMIT"])
|
||||||
|
]
|
||||||
|
|
||||||
|
# Bash recipe for building across all platforms
|
||||||
|
script = raw"""
|
||||||
|
cd ${WORKSPACE}/srcdir/lapack
|
||||||
|
|
||||||
|
# FortranCInterface_VERIFY fails on macOS, but it's not actually needed for the current build
|
||||||
|
sed -i 's/FortranCInterface_VERIFY/# FortranCInterface_VERIFY/g' ./CBLAS/CMakeLists.txt
|
||||||
|
sed -i 's/FortranCInterface_VERIFY/# FortranCInterface_VERIFY/g' ./LAPACKE/include/CMakeLists.txt
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. \
|
||||||
|
-DCBLAS=ON \
|
||||||
|
-DLAPACKE=ON \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$prefix" \
|
||||||
|
-DCMAKE_FIND_ROOT_PATH="$prefix" \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="${CMAKE_TARGET_TOOLCHAIN}" \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
|
-DBUILD_INDEX64_EXT_API=OFF \
|
||||||
|
-DTEST_FORTRAN_COMPILER=OFF \
|
||||||
|
-DLAPACKE_WITH_TMG=OFF
|
||||||
|
|
||||||
|
make -j${nproc}
|
||||||
|
make install
|
||||||
|
|
||||||
|
install_license $WORKSPACE/srcdir/lapack/LICENSE
|
||||||
|
"""
|
||||||
|
|
||||||
|
# These are the platforms we will build for by default, unless further
|
||||||
|
# platforms are passed in on the command line
|
||||||
|
platforms = supported_platforms()
|
||||||
|
platforms = expand_gfortran_versions(platforms)
|
||||||
|
|
||||||
|
# The products that we will ensure are always built
|
||||||
|
products = [
|
||||||
|
FileProduct("lib/libblas.a", :libblas_a),
|
||||||
|
FileProduct("lib/libcblas.a", :libcblas_a),
|
||||||
|
FileProduct("lib/liblapack.a", :liblapack_a),
|
||||||
|
FileProduct("lib/liblapacke.a", :liblapacke_a),
|
||||||
|
# LibraryProduct("libblas", :libblas),
|
||||||
|
# LibraryProduct("libcblas", :libcblas),
|
||||||
|
# LibraryProduct("liblapack", :liblapack),
|
||||||
|
# LibraryProduct("liblapacke", :liblapacke),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Dependencies that must be installed before this package can be built
|
||||||
|
dependencies = [
|
||||||
|
Dependency(PackageSpec(name="CompilerSupportLibraries_jll", uuid="e66e0078-7015-5450-92f7-15fbd957f2ae")),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Build the tarballs, and possibly a `build.jl` as well.
|
||||||
|
build_tarballs(ARGS, name, version, sources, script, platforms, products, dependencies; julia_compat="1.6")
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
# Version
|
||||||
|
haskey(ENV, "BLAS_LAPACK_RELEASE") || error("The environment variable BLAS_LAPACK_RELEASE is not defined.")
|
||||||
|
version = VersionNumber(ENV["BLAS_LAPACK_RELEASE"])
|
||||||
|
version2 = ENV["BLAS_LAPACK_RELEASE"]
|
||||||
|
package = "blas_lapack"
|
||||||
|
|
||||||
|
platforms = [
|
||||||
|
("aarch64-apple-darwin-libgfortran5" , "lib", "dylib"),
|
||||||
|
# ("aarch64-linux-gnu-libgfortran3" , "lib", "so" ),
|
||||||
|
# ("aarch64-linux-gnu-libgfortran4" , "lib", "so" ),
|
||||||
|
("aarch64-linux-gnu-libgfortran5" , "lib", "so" ),
|
||||||
|
# ("aarch64-linux-musl-libgfortran3" , "lib", "so" ),
|
||||||
|
# ("aarch64-linux-musl-libgfortran4" , "lib", "so" ),
|
||||||
|
# ("aarch64-linux-musl-libgfortran5" , "lib", "so" ),
|
||||||
|
# ("powerpc64le-linux-gnu-libgfortran3" , "lib", "so" ),
|
||||||
|
# ("powerpc64le-linux-gnu-libgfortran4" , "lib", "so" ),
|
||||||
|
# ("powerpc64le-linux-gnu-libgfortran5" , "lib", "so" ),
|
||||||
|
# ("x86_64-apple-darwin-libgfortran3" , "lib", "dylib"),
|
||||||
|
# ("x86_64-apple-darwin-libgfortran4" , "lib", "dylib"),
|
||||||
|
("x86_64-apple-darwin-libgfortran5" , "lib", "dylib"),
|
||||||
|
# ("x86_64-linux-gnu-libgfortran3" , "lib", "so" ),
|
||||||
|
# ("x86_64-linux-gnu-libgfortran4" , "lib", "so" ),
|
||||||
|
("x86_64-linux-gnu-libgfortran5" , "lib", "so" ),
|
||||||
|
# ("x86_64-linux-musl-libgfortran3" , "lib", "so" ),
|
||||||
|
# ("x86_64-linux-musl-libgfortran4" , "lib", "so" ),
|
||||||
|
# ("x86_64-linux-musl-libgfortran5" , "lib", "so" ),
|
||||||
|
# ("x86_64-unknown-freebsd-libgfortran3", "lib", "so" ),
|
||||||
|
# ("x86_64-unknown-freebsd-libgfortran4", "lib", "so" ),
|
||||||
|
# ("x86_64-unknown-freebsd-libgfortran5", "lib", "so" ),
|
||||||
|
# ("x86_64-w64-mingw32-libgfortran3" , "bin", "dll" ),
|
||||||
|
# ("x86_64-w64-mingw32-libgfortran4" , "bin", "dll" ),
|
||||||
|
("x86_64-w64-mingw32-libgfortran5" , "bin", "dll" ),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
for (platform, libdir, ext) in platforms
|
||||||
|
|
||||||
|
tarball_name = "$package.v$version.$platform.tar.gz"
|
||||||
|
|
||||||
|
if isfile("products/$(tarball_name)")
|
||||||
|
# Unzip the tarball generated by BinaryBuilder.jl
|
||||||
|
isdir("products/$platform") && rm("products/$platform", recursive=true)
|
||||||
|
mkdir("products/$platform")
|
||||||
|
run(`tar -xzf products/$(tarball_name) -C products/$platform`)
|
||||||
|
|
||||||
|
if isfile("products/$platform/deps.tar.gz")
|
||||||
|
# Unzip the tarball of the dependencies
|
||||||
|
run(`tar -xzf products/$platform/deps.tar.gz -C products/$platform`)
|
||||||
|
|
||||||
|
# Copy the license of each dependency
|
||||||
|
for folder in readdir("products/$platform/deps/licenses")
|
||||||
|
cp("products/$platform/deps/licenses/$folder", "products/$platform/share/licenses/$folder")
|
||||||
|
end
|
||||||
|
rm("products/$platform/deps/licenses", recursive=true)
|
||||||
|
|
||||||
|
# Copy the shared library of each dependency
|
||||||
|
for file in readdir("products/$platform/deps")
|
||||||
|
cp("products/$platform/deps/$file", "products/$platform/$libdir/$file")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove the folder used to unzip the tarball of the dependencies
|
||||||
|
rm("products/$platform/deps", recursive=true)
|
||||||
|
rm("products/$platform/deps.tar.gz", recursive=true)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Create the archives *_binaries
|
||||||
|
isfile("$(package)_binaries.$version2.$platform.tar.gz") && rm("$(package)_binaries.$version2.$platform.tar.gz")
|
||||||
|
isfile("$(package)_binaries.$version2.$platform.zip") && rm("$(package)_binaries.$version2.$platform.zip")
|
||||||
|
cd("products/$platform")
|
||||||
|
|
||||||
|
# Create a folder with the version number of the package
|
||||||
|
mkdir("$(package)_binaries.$version2")
|
||||||
|
for folder in ("include", "share", "lib")
|
||||||
|
cp(folder, "$(package)_binaries.$version2/$folder")
|
||||||
|
end
|
||||||
|
|
||||||
|
cd("$(package)_binaries.$version2")
|
||||||
|
if ext == "dll"
|
||||||
|
run(`zip -r --symlinks ../../../$(package)_binaries.$version2.$platform.zip include share lib`)
|
||||||
|
else
|
||||||
|
run(`tar -czf ../../../$(package)_binaries.$version2.$platform.tar.gz include share lib`)
|
||||||
|
end
|
||||||
|
cd("../../..")
|
||||||
|
|
||||||
|
# Remove the folder used to unzip the tarball generated by BinaryBuilder.jl
|
||||||
|
rm("products/$platform", recursive=true)
|
||||||
|
else
|
||||||
|
@warn("The tarball for the platform $platform was not generated!")
|
||||||
|
end
|
||||||
|
end
|
||||||
+197
-24
@@ -7,6 +7,7 @@ on:
|
|||||||
- try-github-actions-for-windows
|
- try-github-actions-for-windows
|
||||||
paths:
|
paths:
|
||||||
- .github/workflows/cmake.yml
|
- .github/workflows/cmake.yml
|
||||||
|
- lapack_testing.py
|
||||||
- '**CMakeLists.txt'
|
- '**CMakeLists.txt'
|
||||||
- 'BLAS/**'
|
- 'BLAS/**'
|
||||||
- 'CBLAS/**'
|
- 'CBLAS/**'
|
||||||
@@ -21,6 +22,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- .github/workflows/cmake.yml
|
- .github/workflows/cmake.yml
|
||||||
|
- lapack_testing.py
|
||||||
- '**CMakeLists.txt'
|
- '**CMakeLists.txt'
|
||||||
- 'BLAS/**'
|
- 'BLAS/**'
|
||||||
- 'CBLAS/**'
|
- 'CBLAS/**'
|
||||||
@@ -48,7 +50,7 @@ jobs:
|
|||||||
|
|
||||||
test-install-release:
|
test-install-release:
|
||||||
# Use GNU compilers
|
# Use GNU compilers
|
||||||
|
|
||||||
# The CMake configure and build commands are platform agnostic and should work equally
|
# The CMake configure and build commands are platform agnostic and should work equally
|
||||||
# well on Windows or Mac. You can convert this to a matrix build if you need
|
# well on Windows or Mac. You can convert this to a matrix build if you need
|
||||||
# cross-platform coverage.
|
# cross-platform coverage.
|
||||||
@@ -62,19 +64,16 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
matrix:
|
matrix:
|
||||||
os: [ macos-latest, ubuntu-latest, windows-latest ]
|
os: [ macos-latest, ubuntu-latest, ubuntu-24.04-arm, windows-latest ]
|
||||||
fflags: [
|
fflags: [
|
||||||
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all",
|
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all",
|
||||||
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all -fopenmp" ]
|
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all -fopenmp" ]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout LAPACK
|
- name: Checkout LAPACK
|
||||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||||
|
|
||||||
- name: Install ninja-build tool
|
|
||||||
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
|
||||||
|
|
||||||
- name: Use GCC-14 on MacOS
|
- name: Use GCC-14 on MacOS
|
||||||
if: ${{ matrix.os == 'macos-latest' }}
|
if: ${{ matrix.os == 'macos-latest' }}
|
||||||
run: >
|
run: >
|
||||||
@@ -90,7 +89,8 @@ jobs:
|
|||||||
-D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152"
|
-D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152"
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
|
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
|
||||||
|
# a single-configuration generator such as make or Ninja.
|
||||||
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
||||||
run: >
|
run: >
|
||||||
cmake -B build -G Ninja
|
cmake -B build -G Ninja
|
||||||
@@ -103,9 +103,9 @@ jobs:
|
|||||||
-D BUILD_SHARED_LIBS:BOOL=ON
|
-D BUILD_SHARED_LIBS:BOOL=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
# Execute tests defined by the CMake configuration.
|
# Execute tests defined by the CMake configuration.
|
||||||
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
|
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
|
||||||
run: cmake --build build --config ${{env.BUILD_TYPE}}
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Test with OpenMP
|
- name: Test with OpenMP
|
||||||
working-directory: ${{github.workspace}}/build
|
working-directory: ${{github.workspace}}/build
|
||||||
@@ -117,16 +117,53 @@ jobs:
|
|||||||
if: ${{ !contains( matrix.fflags, 'openmp' ) && (matrix.os != 'windows-latest') }}
|
if: ${{ !contains( matrix.fflags, 'openmp' ) && (matrix.os != 'windows-latest') }}
|
||||||
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100
|
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100
|
||||||
|
|
||||||
|
- name: Upload test results
|
||||||
|
id: upload-test-results
|
||||||
|
# Uploaded even when the tests failed; that is when the results
|
||||||
|
# are needed most. The test summary below links to the artifact.
|
||||||
|
if: ${{ !cancelled() && matrix.os != 'windows-latest' }}
|
||||||
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
|
with:
|
||||||
|
name: test-results-${{ matrix.os }}-${{ contains( matrix.fflags, 'openmp' ) && 'openmp' || 'no-openmp' }}
|
||||||
|
path: |
|
||||||
|
build/TESTING/testing_results.txt
|
||||||
|
build/lapack_testing_junit.xml
|
||||||
|
if-no-files-found: warn
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Write test summary
|
||||||
|
if: ${{ !cancelled() && matrix.os != 'windows-latest' }}
|
||||||
|
env:
|
||||||
|
ARTIFACT_URL: ${{ steps.upload-test-results.outputs.artifact-url }}
|
||||||
|
run: |
|
||||||
|
cd build 2>/dev/null || exit 0
|
||||||
|
python3 lapack_testing.py -d TESTING --merge-apis --markdown summary.md || true
|
||||||
|
if [ -f summary.md ]; then
|
||||||
|
cat summary.md >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
if [ -n "$ARTIFACT_URL" ]; then
|
||||||
|
printf '\nThe raw output of every test run (`testing_results.txt`) and a JUnit XML report are in the [test-results artifact](%s).\n' "$ARTIFACT_URL" >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
|
# Since we use a single configuration generator, Ninja, there is no need to provide
|
||||||
|
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
|
||||||
run: cmake --build build --target install -j2
|
run: cmake --build build --target install -j2
|
||||||
|
|
||||||
coverage:
|
test-extended-api-only:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BUILD_TYPE: Coverage
|
BUILD_TYPE: Release
|
||||||
FFLAGS: "-fopenmp"
|
FFLAGS: "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all"
|
||||||
steps:
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
|
matrix:
|
||||||
|
shared_libs: [ OFF, ON ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
- name: Checkout LAPACK
|
- name: Checkout LAPACK
|
||||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||||
|
|
||||||
@@ -134,7 +171,73 @@ jobs:
|
|||||||
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
|
run: >
|
||||||
|
cmake -B build -G Ninja
|
||||||
|
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
||||||
|
-D BUILD_SHARED_LIBS:BOOL=${{matrix.shared_libs}}
|
||||||
|
-D BUILD_DEFAULT_API:BOOL=OFF
|
||||||
|
-D BUILD_INDEX64_EXT_API:BOOL=ON
|
||||||
|
-D BUILD_TESTING:BOOL=ON
|
||||||
|
-D CBLAS:BOOL=ON
|
||||||
|
-D LAPACKE:BOOL=ON
|
||||||
|
-D LAPACKE_WITH_TMG:BOOL=ON
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build --config ${{env.BUILD_TYPE}}
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100
|
||||||
|
|
||||||
|
- name: Upload test results
|
||||||
|
id: upload-test-results
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
|
with:
|
||||||
|
name: test-results-extended-api-shared-${{ matrix.shared_libs }}
|
||||||
|
path: |
|
||||||
|
build/TESTING/testing_results.txt
|
||||||
|
build/lapack_testing_junit.xml
|
||||||
|
if-no-files-found: warn
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Write test summary
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
|
env:
|
||||||
|
ARTIFACT_URL: ${{ steps.upload-test-results.outputs.artifact-url }}
|
||||||
|
run: |
|
||||||
|
cd build 2>/dev/null || exit 0
|
||||||
|
python3 lapack_testing.py -d TESTING --merge-apis --markdown summary.md || true
|
||||||
|
if [ -f summary.md ]; then
|
||||||
|
cat summary.md >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
if [ -n "$ARTIFACT_URL" ]; then
|
||||||
|
printf '\nThe raw output of every test run (`testing_results.txt`) and a JUnit XML report are in the [test-results artifact](%s).\n' "$ARTIFACT_URL" >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
BUILD_TYPE: Coverage
|
||||||
|
FFLAGS: "-fopenmp"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Checkout LAPACK
|
||||||
|
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||||
|
with:
|
||||||
|
# Codecov cannot determine which commit a report belongs to from a
|
||||||
|
# depth-1 clone of a pull request merge commit.
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Install ninja-build tool
|
||||||
|
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
|
||||||
|
# a single-configuration generator such as make or Ninja.
|
||||||
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
||||||
run: >
|
run: >
|
||||||
cmake -B build -G Ninja
|
cmake -B build -G Ninja
|
||||||
@@ -147,17 +250,75 @@ jobs:
|
|||||||
-D BUILD_SHARED_LIBS:BOOL=ON
|
-D BUILD_SHARED_LIBS:BOOL=ON
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
|
# Since we use a single configuration generator, Ninja, there is no need to provide
|
||||||
|
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
|
||||||
run: cmake --build build --target install -j2
|
run: cmake --build build --target install -j2
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 1800
|
||||||
|
|
||||||
- name: Coverage
|
- name: Coverage
|
||||||
|
# Since we use a single configuration generator, Ninja, there is no need to provide
|
||||||
|
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
|
run: cmake --build build --target coverage
|
||||||
|
|
||||||
|
- name: Summarize coverage
|
||||||
|
# The coverage target discards gcov's output, so an entirely empty report
|
||||||
|
# is indistinguishable from a good one unless we look at the numbers.
|
||||||
|
# Print them, and fail if nothing was measured at all.
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
run: |
|
run: |
|
||||||
echo "Coverage"
|
gcda=$(find build -name '*.gcda' | wc -l)
|
||||||
cmake --build build --target coverage
|
reports=$(find build -name '*.gcov' | wc -l)
|
||||||
bash <(curl -s https://codecov.io/bash) -X gcov
|
echo "counter files (.gcda): ${gcda}"
|
||||||
|
echo "gcov reports (.gcov): ${reports}"
|
||||||
|
if [ "${gcda}" -eq 0 ] || [ "${reports}" -eq 0 ]; then
|
||||||
|
echo "::error::No coverage data was recorded; the report would be empty."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# In a gcov report an executed line is prefixed with its execution
|
||||||
|
# count and an unexecuted one with '#####' or '====='; everything else
|
||||||
|
# ('-') is not executable.
|
||||||
|
set -- $(find build -name '*.gcov' -exec cat {} + | awk '
|
||||||
|
/^ *[0-9]+[*]?:/ { hit++; next }
|
||||||
|
/^ *(#####|=====):/ { miss++ }
|
||||||
|
END { printf "%d %d\n", hit + 0, hit + miss + 0 }')
|
||||||
|
hit=$1
|
||||||
|
total=$2
|
||||||
|
if [ "${hit}" -eq 0 ]; then
|
||||||
|
echo "::error::Coverage report is empty: not a single line was executed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
percent=$(awk -v h="${hit}" -v t="${total}" 'BEGIN { printf "%.2f", 100 * h / t }')
|
||||||
|
echo "lines executed: ${hit} of ${total} (${percent}%)"
|
||||||
|
printf '## Coverage\n\n%s%% of lines executed (%s of %s) across %s files.\n' \
|
||||||
|
"${percent}" "${hit}" "${total}" "${reports}" >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|
||||||
|
- name: Upload coverage report to Codecov
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
# The .gcov files already exist, so there is no need for the uploader
|
||||||
|
# to run gcov a second time itself.
|
||||||
|
plugins: noop
|
||||||
|
verbose: true
|
||||||
|
# Pull requests from forks have no access to repository secrets, so
|
||||||
|
# they can only upload if the Codecov organization permits tokenless
|
||||||
|
# uploads. Do not turn that into a CI failure for the contributor.
|
||||||
|
fail_ci_if_error: ${{ secrets.CODECOV_TOKEN != '' }}
|
||||||
|
|
||||||
test-install-cblas-lapacke-without-fortran-compiler:
|
test-install-cblas-lapacke-without-fortran-compiler:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
BUILD_TYPE: Release
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout LAPACK
|
- name: Checkout LAPACK
|
||||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||||
|
|
||||||
@@ -171,9 +332,12 @@ jobs:
|
|||||||
sudo apt purge gfortran
|
sudo apt purge gfortran
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
|
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
|
||||||
|
# a single-configuration generator such as make or Ninja.
|
||||||
|
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
||||||
run: >
|
run: >
|
||||||
cmake -B build -G Ninja
|
cmake -B build -G Ninja
|
||||||
-D CMAKE_BUILD_TYPE=Release
|
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
||||||
-D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install
|
-D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install
|
||||||
-D CBLAS:BOOL=ON
|
-D CBLAS:BOOL=ON
|
||||||
-D LAPACKE:BOOL=ON
|
-D LAPACKE:BOOL=ON
|
||||||
@@ -184,10 +348,14 @@ jobs:
|
|||||||
-D BUILD_SHARED_LIBS:BOOL=ON
|
-D BUILD_SHARED_LIBS:BOOL=ON
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
|
# Since we use a single configuration generator, Ninja, there is no need to provide
|
||||||
|
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
|
||||||
run: cmake --build build --target install -j2
|
run: cmake --build build --target install -j2
|
||||||
|
|
||||||
memory-check:
|
memory-check:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BUILD_TYPE: Debug
|
BUILD_TYPE: Debug
|
||||||
|
|
||||||
@@ -198,13 +366,16 @@ jobs:
|
|||||||
|
|
||||||
- name: Install ninja-build tool
|
- name: Install ninja-build tool
|
||||||
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
|
||||||
|
|
||||||
- name: Install APT packages
|
- name: Install APT packages
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install -y cmake valgrind gfortran
|
sudo apt install -y cmake valgrind gfortran
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
|
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
|
||||||
|
# a single-configuration generator such as make or Ninja.
|
||||||
|
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
|
||||||
run: >
|
run: >
|
||||||
cmake -B build -G Ninja
|
cmake -B build -G Ninja
|
||||||
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
||||||
@@ -216,12 +387,14 @@ jobs:
|
|||||||
-D LAPACK_TESTING_USE_PYTHON:BOOL=OFF
|
-D LAPACK_TESTING_USE_PYTHON:BOOL=OFF
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build --config ${{env.BUILD_TYPE}}
|
# Since we use a single configuration generator, Ninja, there is no need to provide
|
||||||
|
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
working-directory: ${{github.workspace}}/build
|
working-directory: ${{github.workspace}}/build
|
||||||
run: |
|
run: |
|
||||||
ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 -T memcheck > memcheck.out
|
ctest -C ${{env.BUILD_TYPE}} --output-on-failure --schedule-random -j2 -T memcheck > memcheck.out
|
||||||
cat memcheck.out
|
cat memcheck.out
|
||||||
if tail -n 1 memcheck.out | grep -q "Memory checking results:"; then
|
if tail -n 1 memcheck.out | grep -q "Memory checking results:"; then
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -0,0 +1,239 @@
|
|||||||
|
name: Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# Sequence of patterns matched against refs/tags
|
||||||
|
tags:
|
||||||
|
- 'v*' # Push events to matching v*, i.e. v1.0, v2023.11.15
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux-x64:
|
||||||
|
name: blas / lapack -- Linux (x86_64) -- Release ${{ github.ref_name }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Julia
|
||||||
|
uses: julia-actions/setup-julia@v2
|
||||||
|
with:
|
||||||
|
version: "1.7"
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, BLAS_LAPACK_RELEASE, BLAS_LAPACK_COMMIT
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cross-compilation of blas / lapack -- x86_64-linux-gnu-libgfortran5
|
||||||
|
run: |
|
||||||
|
julia --color=no -e 'using Pkg; Pkg.add("BinaryBuilder")'
|
||||||
|
julia --color=no .github/julia/build_tarballs.jl x86_64-linux-gnu-libgfortran5 --verbose
|
||||||
|
|
||||||
|
- name: Archive artifact
|
||||||
|
run: julia --color=no .github/julia/generate_binaries.jl
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: blas_lapack_binaries.${{ github.ref_name }}.x86_64-linux-gnu-libgfortran5.tar.gz
|
||||||
|
path: ./blas_lapack_binaries.${{ github.ref_name }}.x86_64-linux-gnu-libgfortran5.tar.gz
|
||||||
|
|
||||||
|
build-linux-aarch64:
|
||||||
|
name: blas / lapack -- Linux (aarch64) -- Release ${{ github.ref_name }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Julia
|
||||||
|
uses: julia-actions/setup-julia@v2
|
||||||
|
with:
|
||||||
|
version: "1.7"
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, BLAS_LAPACK_RELEASE, BLAS_LAPACK_COMMIT
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cross-compilation of blas / lapack -- aarch64-linux-gnu-libgfortran5
|
||||||
|
run: |
|
||||||
|
julia --color=no -e 'using Pkg; Pkg.add("BinaryBuilder")'
|
||||||
|
julia --color=no .github/julia/build_tarballs.jl aarch64-linux-gnu-libgfortran5 --verbose
|
||||||
|
|
||||||
|
- name: Archive artifact
|
||||||
|
run: julia --color=no .github/julia/generate_binaries.jl
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: blas_lapack_binaries.${{ github.ref_name }}.aarch64-linux-gnu-libgfortran5.tar.gz
|
||||||
|
path: ./blas_lapack_binaries.${{ github.ref_name }}.aarch64-linux-gnu-libgfortran5.tar.gz
|
||||||
|
|
||||||
|
build-windows-x64:
|
||||||
|
name: blas / lapack -- Windows (x86_64) -- Release ${{ github.ref_name }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Julia
|
||||||
|
uses: julia-actions/setup-julia@v2
|
||||||
|
with:
|
||||||
|
version: "1.7"
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, BLAS_LAPACK_RELEASE, BLAS_LAPACK_COMMIT
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cross-compilation of blas / lapack -- x86_64-w64-mingw32-libgfortran5
|
||||||
|
run: |
|
||||||
|
julia --color=no -e 'using Pkg; Pkg.add("BinaryBuilder")'
|
||||||
|
julia --color=no .github/julia/build_tarballs.jl x86_64-w64-mingw32-libgfortran5 --verbose
|
||||||
|
- name: Archive artifact
|
||||||
|
run: julia --color=no .github/julia/generate_binaries.jl
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: blas_lapack_binaries.${{ github.ref_name }}.x86_64-w64-mingw32-libgfortran5.zip
|
||||||
|
path: ./blas_lapack_binaries.${{ github.ref_name }}.x86_64-w64-mingw32-libgfortran5.zip
|
||||||
|
|
||||||
|
build-mac-x64:
|
||||||
|
name: blas / lapack -- macOS (x86_64) -- Release ${{ github.ref_name }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Julia
|
||||||
|
uses: julia-actions/setup-julia@v2
|
||||||
|
with:
|
||||||
|
version: "1.7"
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, BLAS_LAPACK_RELEASE, BLAS_LAPACK_COMMIT
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cross-compilation of blas / lapack -- x86_64-apple-darwin-libgfortran5
|
||||||
|
run: |
|
||||||
|
julia --color=no -e 'using Pkg; Pkg.add("BinaryBuilder")'
|
||||||
|
julia --color=no .github/julia/build_tarballs.jl x86_64-apple-darwin-libgfortran5 --verbose
|
||||||
|
|
||||||
|
- name: Archive artifact
|
||||||
|
run: julia --color=no .github/julia/generate_binaries.jl
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: blas_lapack_binaries.${{ github.ref_name }}.x86_64-apple-darwin-libgfortran5.tar.gz
|
||||||
|
path: ./blas_lapack_binaries.${{ github.ref_name }}.x86_64-apple-darwin-libgfortran5.tar.gz
|
||||||
|
|
||||||
|
build-mac-aarch64:
|
||||||
|
name: blas / lapack -- macOS (aarch64) -- Release ${{ github.ref_name }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Julia
|
||||||
|
uses: julia-actions/setup-julia@v2
|
||||||
|
with:
|
||||||
|
version: "1.7"
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, BLAS_LAPACK_RELEASE, BLAS_LAPACK_COMMIT
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
|
||||||
|
echo "BLAS_LAPACK_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cross-compilation of blas / lapack -- aarch64-apple-darwin-libgfortran5
|
||||||
|
run: |
|
||||||
|
julia --color=no -e 'using Pkg; Pkg.add("BinaryBuilder")'
|
||||||
|
julia --color=no .github/julia/build_tarballs.jl aarch64-apple-darwin-libgfortran5 --verbose
|
||||||
|
|
||||||
|
- name: Archive artifact
|
||||||
|
run: julia --color=no .github/julia/generate_binaries.jl
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: blas_lapack_binaries.${{ github.ref_name }}.aarch64-apple-darwin-libgfortran5.tar.gz
|
||||||
|
path: ./blas_lapack_binaries.${{ github.ref_name }}.aarch64-apple-darwin-libgfortran5.tar.gz
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Create Release and Upload Binaries
|
||||||
|
needs: [build-windows-x64, build-linux-x64, build-linux-aarch64, build-mac-x64, build-mac-aarch64]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout lapack
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Create GitHub Release
|
||||||
|
run: |
|
||||||
|
gh release create ${{ github.ref_name }} \
|
||||||
|
--title "${{ github.ref_name }}" \
|
||||||
|
--notes "" \
|
||||||
|
--verify-tag
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Linux (x86_64) artifact
|
||||||
|
run: |
|
||||||
|
gh release upload ${{ github.ref_name }} \
|
||||||
|
blas_lapack_binaries.${{ github.ref_name }}.x86_64-linux-gnu-libgfortran5.tar.gz/blas_lapack_binaries.${{ github.ref_name }}.x86_64-linux-gnu-libgfortran5.tar.gz#blas_lapack.${{ github.ref_name }}.linux.x86_64.tar.gz
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Linux (aarch64) artifact
|
||||||
|
run: |
|
||||||
|
gh release upload ${{ github.ref_name }} \
|
||||||
|
blas_lapack_binaries.${{ github.ref_name }}.aarch64-linux-gnu-libgfortran5.tar.gz/blas_lapack_binaries.${{ github.ref_name }}.aarch64-linux-gnu-libgfortran5.tar.gz#blas_lapack.${{ github.ref_name }}.linux.aarch64.tar.gz
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Mac (x86_64) artifact
|
||||||
|
run: |
|
||||||
|
gh release upload ${{ github.ref_name }} \
|
||||||
|
blas_lapack_binaries.${{ github.ref_name }}.x86_64-apple-darwin-libgfortran5.tar.gz/blas_lapack_binaries.${{ github.ref_name }}.x86_64-apple-darwin-libgfortran5.tar.gz#blas_lapack.${{ github.ref_name }}.mac.x86_64.tar.gz
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Mac (aarch64) artifact
|
||||||
|
run: |
|
||||||
|
gh release upload ${{ github.ref_name }} \
|
||||||
|
blas_lapack_binaries.${{ github.ref_name }}.aarch64-apple-darwin-libgfortran5.tar.gz/blas_lapack_binaries.${{ github.ref_name }}.aarch64-apple-darwin-libgfortran5.tar.gz#blas_lapack.${{ github.ref_name }}.mac.aarch64.tar.gz
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Windows (x86_64) artifact
|
||||||
|
run: |
|
||||||
|
gh release upload ${{ github.ref_name }} \
|
||||||
|
blas_lapack_binaries.${{ github.ref_name }}.x86_64-w64-mingw32-libgfortran5.zip/blas_lapack_binaries.${{ github.ref_name }}.x86_64-w64-mingw32-libgfortran5.zip#blas_lapack.${{ github.ref_name }}.windows.x86_64.zip
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -32,12 +32,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # tag=v4.2.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: "Run analysis"
|
- name: "Run analysis"
|
||||||
uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0
|
uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0
|
||||||
with:
|
with:
|
||||||
results_file: results.sarif
|
results_file: results.sarif
|
||||||
results_format: sarif
|
results_format: sarif
|
||||||
@@ -59,7 +59,7 @@ jobs:
|
|||||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||||
# format to the repository Actions tab.
|
# format to the repository Actions tab.
|
||||||
- name: "Upload artifact"
|
- name: "Upload artifact"
|
||||||
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
|
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
@@ -67,6 +67,6 @@ jobs:
|
|||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@f9a7c6738f28efb36e31d49c53a201a9c5d6a476 # v2.14.2
|
uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# ignore objects and archives, anywhere in the tree.
|
# ignore objects and archives, anywhere in the tree.
|
||||||
*.[oa]
|
*.[oa]
|
||||||
|
*.so
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
*.pdb
|
||||||
|
|
||||||
# test in INSTALL
|
# test in INSTALL
|
||||||
INSTALL/test*
|
INSTALL/test*
|
||||||
@@ -23,6 +27,7 @@ CBLAS/examples/cblas_ex1
|
|||||||
CBLAS/examples/cblas_ex2
|
CBLAS/examples/cblas_ex2
|
||||||
|
|
||||||
# LAPACK testing
|
# LAPACK testing
|
||||||
|
/lapack_testing_junit.xml
|
||||||
TESTING/LIN/xlintst*
|
TESTING/LIN/xlintst*
|
||||||
TESTING/EIG/xeigtst*
|
TESTING/EIG/xeigtst*
|
||||||
TESTING/EIG/xdmd*
|
TESTING/EIG/xdmd*
|
||||||
@@ -43,3 +48,7 @@ build*
|
|||||||
DOCS/man
|
DOCS/man
|
||||||
DOCS/explore-html
|
DOCS/explore-html
|
||||||
output_err
|
output_err
|
||||||
|
|
||||||
|
# Mod files from compilation in SRC
|
||||||
|
SRC/la_constants.mod
|
||||||
|
SRC/la_xisnan.mod
|
||||||
|
|||||||
+65
-67
@@ -29,31 +29,33 @@
|
|||||||
# Level 1 BLAS
|
# Level 1 BLAS
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
|
|
||||||
set(SBLAS1 isamax.f sasum.f saxpy.f scopy.f sdot.f snrm2.f90
|
set(LAPACK_INSTALL_EXPORT_NAME ${BLASLIB}-targets)
|
||||||
srot.f srotg.f90 sscal.f sswap.f sdsdot.f srotmg.f srotm.f)
|
|
||||||
|
|
||||||
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f caxpy.f ccopy.f
|
set(SBLAS1
|
||||||
cdotc.f cdotu.f csscal.f crotg.f90 cscal.f cswap.f csrot.f)
|
isamax.f sasum.f saxpy.f saxpby.f scopy.f sdot.f snrm2.f90 srot.f srotg.f90
|
||||||
|
sscal.f sswap.f sdsdot.f srotmg.f srotm.f)
|
||||||
|
|
||||||
set(DBLAS1 idamax.f dasum.f daxpy.f dcopy.f ddot.f dnrm2.f90
|
set(CBLAS1
|
||||||
drot.f drotg.f90 dscal.f dsdot.f dswap.f drotmg.f drotm.f)
|
scabs1.f scasum.f scnrm2.f90 icamax.f90 caxpy.f caxpby.f ccopy.f cdotc.f
|
||||||
|
cdotu.f csscal.f crotg.f90 cscal.f cswap.f csrot.f)
|
||||||
|
|
||||||
|
set(DBLAS1
|
||||||
|
idamax.f dasum.f daxpy.f daxpby.f dcopy.f ddot.f dnrm2.f90 drot.f drotg.f90
|
||||||
|
dscal.f dsdot.f dswap.f drotmg.f drotm.f)
|
||||||
|
|
||||||
set(DB1AUX sscal.f isamax.f)
|
set(DB1AUX sscal.f isamax.f)
|
||||||
|
|
||||||
set(ZBLAS1 dcabs1.f dzasum.f dznrm2.f90 izamax.f zaxpy.f zcopy.f
|
set(ZBLAS1
|
||||||
zdotc.f zdotu.f zdscal.f zrotg.f90 zscal.f zswap.f zdrot.f)
|
dcabs1.f dzasum.f dznrm2.f90 izamax.f90 zaxpy.f zaxpby.f zcopy.f zdotc.f
|
||||||
|
zdotu.f zdscal.f zrotg.f90 zscal.f zswap.f zdrot.f)
|
||||||
|
|
||||||
set(CB1AUX
|
set(CB1AUX
|
||||||
isamax.f idamax.f
|
isamax.f idamax.f sasum.f saxpy.f scopy.f sdot.f sgemm.f sgemv.f snrm2.f90
|
||||||
sasum.f saxpy.f scopy.f sdot.f sgemm.f sgemv.f snrm2.f90 srot.f sscal.f
|
srot.f sscal.f sswap.f)
|
||||||
sswap.f)
|
|
||||||
|
|
||||||
set(ZB1AUX
|
set(ZB1AUX
|
||||||
icamax.f idamax.f
|
icamax.f90 idamax.f cgemm.f cherk.f cscal.f ctrsm.f dasum.f daxpy.f dcopy.f
|
||||||
cgemm.f cherk.f cscal.f ctrsm.f
|
ddot.f dgemm.f dgemv.f dnrm2.f90 drot.f dscal.f dswap.f scabs1.f)
|
||||||
dasum.f daxpy.f dcopy.f ddot.f dgemm.f dgemv.f dnrm2.f90 drot.f dscal.f
|
|
||||||
dswap.f
|
|
||||||
scabs1.f)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
# Auxiliary routines needed by both the Level 2 and Level 3 BLAS
|
# Auxiliary routines needed by both the Level 2 and Level 3 BLAS
|
||||||
@@ -63,34 +65,40 @@ set(ALLBLAS lsame.f xerbla.f xerbla_array.f)
|
|||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
# Level 2 BLAS
|
# Level 2 BLAS
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
set(SBLAS2 sgemv.f sgbmv.f ssymv.f ssbmv.f sspmv.f
|
set(SBLAS2
|
||||||
strmv.f stbmv.f stpmv.f strsv.f stbsv.f stpsv.f
|
sgemv.f sgbmv.f ssymv.f ssbmv.f sspmv.f strmv.f stbmv.f stpmv.f strsv.f
|
||||||
sger.f ssyr.f sspr.f ssyr2.f sspr2.f)
|
stbsv.f stpsv.f sger.f ssyr.f sspr.f ssyr2.f sspr2.f sskewsymv.f sskewsyr2.f)
|
||||||
|
|
||||||
set(CBLAS2 cgemv.f cgbmv.f chemv.f chbmv.f chpmv.f
|
set(CBLAS2
|
||||||
ctrmv.f ctbmv.f ctpmv.f ctrsv.f ctbsv.f ctpsv.f
|
cgemv.f cgbmv.f chemv.f chbmv.f chpmv.f ctrmv.f ctbmv.f ctpmv.f ctrsv.f
|
||||||
cgerc.f cgeru.f cher.f chpr.f cher2.f chpr2.f)
|
ctbsv.f ctpsv.f cgerc.f cgeru.f cher.f chpr.f cher2.f chpr2.f)
|
||||||
|
|
||||||
set(DBLAS2 dgemv.f dgbmv.f dsymv.f dsbmv.f dspmv.f
|
set(DBLAS2
|
||||||
dtrmv.f dtbmv.f dtpmv.f dtrsv.f dtbsv.f dtpsv.f
|
dgemv.f dgbmv.f dsymv.f dsbmv.f dspmv.f dtrmv.f dtbmv.f dtpmv.f dtrsv.f
|
||||||
dger.f dsyr.f dspr.f dsyr2.f dspr2.f)
|
dtbsv.f dtpsv.f dger.f dsyr.f dspr.f dsyr2.f dspr2.f dskewsymv.f dskewsyr2.f)
|
||||||
|
|
||||||
set(ZBLAS2 zgemv.f zgbmv.f zhemv.f zhbmv.f zhpmv.f
|
set(ZBLAS2
|
||||||
ztrmv.f ztbmv.f ztpmv.f ztrsv.f ztbsv.f ztpsv.f
|
zgemv.f zgbmv.f zhemv.f zhbmv.f zhpmv.f ztrmv.f ztbmv.f ztpmv.f ztrsv.f
|
||||||
zgerc.f zgeru.f zher.f zhpr.f zher2.f zhpr2.f)
|
ztbsv.f ztpsv.f zgerc.f zgeru.f zher.f zhpr.f zher2.f zhpr2.f)
|
||||||
|
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
# Level 3 BLAS
|
# Level 3 BLAS
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
set(SBLAS3 sgemm.f ssymm.f ssyrk.f ssyr2k.f strmm.f strsm.f sgemmtr.f)
|
set(SBLAS3
|
||||||
|
sgemm.f ssymm.f ssyrk.f ssyr2k.f strmm.f strsm.f sgemmtr.f sskewsymm.f
|
||||||
|
sskewsyr2k.f)
|
||||||
|
|
||||||
set(CBLAS3 cgemm.f csymm.f csyrk.f csyr2k.f ctrmm.f ctrsm.f
|
set(CBLAS3
|
||||||
chemm.f cherk.f cher2k.f cgemmtr.f)
|
cgemm.f csymm.f csyrk.f csyr2k.f ctrmm.f ctrsm.f chemm.f cherk.f cher2k.f
|
||||||
|
cgemmtr.f)
|
||||||
|
|
||||||
set(DBLAS3 dgemm.f dsymm.f dsyrk.f dsyr2k.f dtrmm.f dtrsm.f dgemmtr.f)
|
set(DBLAS3
|
||||||
|
dgemm.f dsymm.f dsyrk.f dsyr2k.f dtrmm.f dtrsm.f dgemmtr.f dskewsymm.f
|
||||||
|
dskewsyr2k.f)
|
||||||
|
|
||||||
set(ZBLAS3 zgemm.f zsymm.f zsyrk.f zsyr2k.f ztrmm.f ztrsm.f
|
set(ZBLAS3
|
||||||
zhemm.f zherk.f zher2k.f zgemmtr.f)
|
zgemm.f zsymm.f zsyrk.f zsyr2k.f ztrmm.f ztrsm.f zhemm.f zherk.f zher2k.f
|
||||||
|
zgemmtr.f)
|
||||||
|
|
||||||
|
|
||||||
set(SOURCES)
|
set(SOURCES)
|
||||||
@@ -109,53 +117,43 @@ if(BUILD_COMPLEX16)
|
|||||||
endif()
|
endif()
|
||||||
list(REMOVE_DUPLICATES SOURCES)
|
list(REMOVE_DUPLICATES SOURCES)
|
||||||
|
|
||||||
add_library(${BLASLIB}_obj OBJECT ${SOURCES})
|
if(BUILD_DEFAULT_API)
|
||||||
set_target_properties(${BLASLIB}_obj PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
add_library(${BLASLIB}_obj OBJECT ${SOURCES})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(BUILD_INDEX64_EXT_API)
|
if(BUILD_INDEX64_EXT_API)
|
||||||
set(SOURCES_64_F)
|
include(ExtendedAPIHelpers)
|
||||||
# Copy files so we can set source property specific to /${BLASLIB}_64_obj target
|
generate_64bit_suffixed_sources(${BLASLIB} SOURCES SOURCES_64)
|
||||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${BLASLIB}_64_obj)
|
|
||||||
file(COPY ${SOURCES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${BLASLIB}_64_obj)
|
add_library(${BLASLIB}_64_obj OBJECT ${SOURCES_64})
|
||||||
file(GLOB SOURCES_64_F ${CMAKE_CURRENT_BINARY_DIR}/${BLASLIB}_64_obj/*.f*)
|
|
||||||
add_library(${BLASLIB}_64_obj OBJECT ${SOURCES_64_F})
|
|
||||||
target_compile_options(${BLASLIB}_64_obj PRIVATE ${FOPT_ILP64})
|
target_compile_options(${BLASLIB}_64_obj PRIVATE ${FOPT_ILP64})
|
||||||
set_target_properties(${BLASLIB}_64_obj PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
||||||
#Add _64 suffix to all Fortran functions via macros
|
|
||||||
foreach(F IN LISTS SOURCES_64_F)
|
|
||||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG")
|
|
||||||
set_source_files_properties(${F} PROPERTIES COMPILE_FLAGS "-fpp")
|
|
||||||
else()
|
|
||||||
set_source_files_properties(${F} PROPERTIES COMPILE_FLAGS "-cpp")
|
|
||||||
endif()
|
|
||||||
file(STRINGS ${F} ${F}.lst)
|
|
||||||
list(FILTER ${F}.lst INCLUDE REGEX "subroutine|SUBROUTINE|external|EXTERNAL|function|FUNCTION")
|
|
||||||
list(FILTER ${F}.lst EXCLUDE REGEX "^!.*")
|
|
||||||
list(FILTER ${F}.lst EXCLUDE REGEX "^[*].*")
|
|
||||||
list(FILTER ${F}.lst EXCLUDE REGEX "end|END")
|
|
||||||
foreach(FUNC IN LISTS ${F}.lst)
|
|
||||||
string(REGEX REPLACE "^[a-zA-Z0-9_ *]*(subroutine|SUBROUTINE|external|EXTERNAL|function|FUNCTION)[ ]*[*]?" "" FUNC ${FUNC})
|
|
||||||
string(REGEX REPLACE "[(][a-zA-Z0-9_, )]*$" "" FUNC ${FUNC})
|
|
||||||
string(STRIP ${FUNC} FUNC)
|
|
||||||
list(APPEND COPT_64_F "${FUNC}=${FUNC}_64")
|
|
||||||
endforeach()
|
|
||||||
list(REMOVE_DUPLICATES COPT_64_F)
|
|
||||||
set_source_files_properties(${F} PROPERTIES COMPILE_DEFINITIONS "${COPT_64_F}")
|
|
||||||
endforeach()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${BLASLIB}
|
add_library(${BLASLIB}
|
||||||
$<TARGET_OBJECTS:${BLASLIB}_obj>
|
$<$<BOOL:${BUILD_DEFAULT_API}>: $<TARGET_OBJECTS:${BLASLIB}_obj>>
|
||||||
$<$<BOOL:${BUILD_INDEX64_EXT_API}>: $<TARGET_OBJECTS:${BLASLIB}_64_obj>>)
|
$<$<BOOL:${BUILD_INDEX64_EXT_API}>: $<TARGET_OBJECTS:${BLASLIB}_64_obj>>)
|
||||||
|
|
||||||
|
# For flang, use C linker instead of Fortran linker to avoid macOS-specific flags
|
||||||
|
# that CMake adds (tested CMake 4.2).
|
||||||
|
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang")
|
||||||
|
set_target_properties (${BLASLIB} PROPERTIES LINKER_LANGUAGE C)
|
||||||
|
endif()
|
||||||
|
|
||||||
set_target_properties(
|
set_target_properties(
|
||||||
${BLASLIB} PROPERTIES
|
${BLASLIB} PROPERTIES
|
||||||
VERSION ${LAPACK_VERSION}
|
VERSION ${LAPACK_VERSION}
|
||||||
SOVERSION ${LAPACK_MAJOR_VERSION}
|
SOVERSION ${LAPACK_MAJOR_VERSION}
|
||||||
POSITION_INDEPENDENT_CODE ON
|
|
||||||
)
|
)
|
||||||
lapack_install_library(${BLASLIB})
|
lapack_install_library(${BLASLIB})
|
||||||
|
|
||||||
|
add_library(BLAS::BLAS ALIAS ${BLASLIB})
|
||||||
|
install(EXPORT ${BLASLIB}-targets
|
||||||
|
FILE ${BLASLIB}-targets.cmake
|
||||||
|
NAMESPACE BLAS::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LAPACKLIB}-${LAPACK_VERSION}
|
||||||
|
COMPONENT Development
|
||||||
|
)
|
||||||
|
|
||||||
if( TEST_FORTRAN_COMPILER )
|
if( TEST_FORTRAN_COMPILER )
|
||||||
add_dependencies( ${BLASLIB} run_test_zcomplexabs run_test_zcomplexdiv run_test_zcomplexmult run_test_zminMax )
|
add_dependencies( ${BLASLIB} run_test_zcomplexabs run_test_zcomplexdiv run_test_zcomplexmult run_test_zminMax )
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+12
-8
@@ -69,19 +69,19 @@ all: $(BLASLIB)
|
|||||||
# Comment out the next 6 definitions if you already have
|
# Comment out the next 6 definitions if you already have
|
||||||
# the Level 1 BLAS.
|
# the Level 1 BLAS.
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.o \
|
SBLAS1 = isamax.o sasum.o saxpy.o saxpby.o scopy.o sdot.o snrm2.o \
|
||||||
srot.o srotg.o sscal.o sswap.o sdsdot.o srotmg.o srotm.o
|
srot.o srotg.o sscal.o sswap.o sdsdot.o srotmg.o srotm.o
|
||||||
$(SBLAS1): $(FRC)
|
$(SBLAS1): $(FRC)
|
||||||
|
|
||||||
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o ccopy.o \
|
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o caxpby.o ccopy.o \
|
||||||
cdotc.o cdotu.o csscal.o crotg.o cscal.o cswap.o csrot.o
|
cdotc.o cdotu.o csscal.o crotg.o cscal.o cswap.o csrot.o
|
||||||
$(CBLAS1): $(FRC)
|
$(CBLAS1): $(FRC)
|
||||||
|
|
||||||
DBLAS1 = idamax.o dasum.o daxpy.o dcopy.o ddot.o dnrm2.o \
|
DBLAS1 = idamax.o dasum.o daxpy.o daxpby.o dcopy.o ddot.o dnrm2.o \
|
||||||
drot.o drotg.o dscal.o dsdot.o dswap.o drotmg.o drotm.o
|
drot.o drotg.o dscal.o dsdot.o dswap.o drotmg.o drotm.o
|
||||||
$(DBLAS1): $(FRC)
|
$(DBLAS1): $(FRC)
|
||||||
|
|
||||||
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zcopy.o \
|
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zaxpby.o zcopy.o \
|
||||||
zdotc.o zdotu.o zdscal.o zrotg.o zscal.o zswap.o zdrot.o
|
zdotc.o zdotu.o zdscal.o zrotg.o zscal.o zswap.o zdrot.o
|
||||||
$(ZBLAS1): $(FRC)
|
$(ZBLAS1): $(FRC)
|
||||||
|
|
||||||
@@ -105,7 +105,8 @@ $(ALLBLAS): $(FRC)
|
|||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
SBLAS2 = sgemv.o sgbmv.o ssymv.o ssbmv.o sspmv.o \
|
SBLAS2 = sgemv.o sgbmv.o ssymv.o ssbmv.o sspmv.o \
|
||||||
strmv.o stbmv.o stpmv.o strsv.o stbsv.o stpsv.o \
|
strmv.o stbmv.o stpmv.o strsv.o stbsv.o stpsv.o \
|
||||||
sger.o ssyr.o sspr.o ssyr2.o sspr2.o
|
sger.o ssyr.o sspr.o ssyr2.o sspr2.o \
|
||||||
|
sskewsymv.o sskewsyr2.o
|
||||||
$(SBLAS2): $(FRC)
|
$(SBLAS2): $(FRC)
|
||||||
|
|
||||||
CBLAS2 = cgemv.o cgbmv.o chemv.o chbmv.o chpmv.o \
|
CBLAS2 = cgemv.o cgbmv.o chemv.o chbmv.o chpmv.o \
|
||||||
@@ -115,7 +116,8 @@ $(CBLAS2): $(FRC)
|
|||||||
|
|
||||||
DBLAS2 = dgemv.o dgbmv.o dsymv.o dsbmv.o dspmv.o \
|
DBLAS2 = dgemv.o dgbmv.o dsymv.o dsbmv.o dspmv.o \
|
||||||
dtrmv.o dtbmv.o dtpmv.o dtrsv.o dtbsv.o dtpsv.o \
|
dtrmv.o dtbmv.o dtpmv.o dtrsv.o dtbsv.o dtpsv.o \
|
||||||
dger.o dsyr.o dspr.o dsyr2.o dspr2.o
|
dger.o dsyr.o dspr.o dsyr2.o dspr2.o \
|
||||||
|
dskewsymv.o dskewsyr2.o
|
||||||
$(DBLAS2): $(FRC)
|
$(DBLAS2): $(FRC)
|
||||||
|
|
||||||
ZBLAS2 = zgemv.o zgbmv.o zhemv.o zhbmv.o zhpmv.o \
|
ZBLAS2 = zgemv.o zgbmv.o zhemv.o zhbmv.o zhpmv.o \
|
||||||
@@ -127,14 +129,16 @@ $(ZBLAS2): $(FRC)
|
|||||||
# Comment out the next 4 definitions if you already have
|
# Comment out the next 4 definitions if you already have
|
||||||
# the Level 3 BLAS.
|
# the Level 3 BLAS.
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
SBLAS3 = sgemm.o ssymm.o ssyrk.o ssyr2k.o strmm.o strsm.o sgemmtr.o
|
SBLAS3 = sgemm.o ssymm.o ssyrk.o ssyr2k.o strmm.o strsm.o sgemmtr.o \
|
||||||
|
sskewsymm.o sskewsyr2k.o
|
||||||
$(SBLAS3): $(FRC)
|
$(SBLAS3): $(FRC)
|
||||||
|
|
||||||
CBLAS3 = cgemm.o csymm.o csyrk.o csyr2k.o ctrmm.o ctrsm.o \
|
CBLAS3 = cgemm.o csymm.o csyrk.o csyr2k.o ctrmm.o ctrsm.o \
|
||||||
chemm.o cherk.o cher2k.o cgemmtr.o
|
chemm.o cherk.o cher2k.o cgemmtr.o
|
||||||
$(CBLAS3): $(FRC)
|
$(CBLAS3): $(FRC)
|
||||||
|
|
||||||
DBLAS3 = dgemm.o dsymm.o dsyrk.o dsyr2k.o dtrmm.o dtrsm.o dgemmtr.o
|
DBLAS3 = dgemm.o dsymm.o dsyrk.o dsyr2k.o dtrmm.o dtrsm.o dgemmtr.o \
|
||||||
|
dskewsymm.o dskewsyr2k.o
|
||||||
$(DBLAS3): $(FRC)
|
$(DBLAS3): $(FRC)
|
||||||
|
|
||||||
ZBLAS3 = zgemm.o zsymm.o zsyrk.o zsyr2k.o ztrmm.o ztrsm.o \
|
ZBLAS3 = zgemm.o zsymm.o zsyrk.o zsyr2k.o ztrmm.o ztrsm.o \
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
*> \brief \b CAXPBY
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* COMPLEX CA,CB
|
||||||
|
* INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* COMPLEX CX(*),CY(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> CAXPBY constant times a vector plus constant times a vector.
|
||||||
|
*>
|
||||||
|
*> Y = ALPHA * X + BETA * Y
|
||||||
|
*>
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] CA
|
||||||
|
*> \verbatim
|
||||||
|
*> CA is COMPLEX
|
||||||
|
*> On entry, CA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] CX
|
||||||
|
*> \verbatim
|
||||||
|
*> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of CX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] CB
|
||||||
|
*> \verbatim
|
||||||
|
*> CB is COMPLEX
|
||||||
|
*> On entry, CB specifies the scalar beta.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] CY
|
||||||
|
*> \verbatim
|
||||||
|
*> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of CY
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*> \author Martin Koehler, MPI Magdeburg
|
||||||
|
*
|
||||||
|
*> \ingroup axpby
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level1 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
COMPLEX CA, CB
|
||||||
|
INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
COMPLEX CX(*),CY(*)
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL CSCAL
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I,IX,IY
|
||||||
|
* ..
|
||||||
|
IF (N.LE.0) RETURN
|
||||||
|
|
||||||
|
IF (CA .EQ. (0.0,0.0) .AND. CB.NE.(0.0,0.0)) THEN
|
||||||
|
CALL CSCAL(N,CB, CY, INCY)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
|
||||||
|
*
|
||||||
|
* code for both increments equal to 1
|
||||||
|
*
|
||||||
|
DO I = 1,N
|
||||||
|
CY(I) = CB*CY(I) + CA*CX(I)
|
||||||
|
END DO
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* code for unequal increments or equal increments
|
||||||
|
* not equal to 1
|
||||||
|
*
|
||||||
|
IX = 1
|
||||||
|
IY = 1
|
||||||
|
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
|
||||||
|
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
|
||||||
|
DO I = 1,N
|
||||||
|
CY(IY) = CB*CY(IY) + CA*CX(IX)
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
END DO
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of CAXBPY
|
||||||
|
*
|
||||||
|
END
|
||||||
+8
-4
@@ -85,6 +85,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CAXPY(N,CA,CX,INCX,CY,INCY)
|
SUBROUTINE CAXPY(N,CA,CX,INCX,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -102,13 +103,16 @@
|
|||||||
*
|
*
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
INTEGER I,IX,IY
|
INTEGER I,IX,IY
|
||||||
|
COMPLEX CDUM
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. Statement Functions ..
|
||||||
REAL SCABS1
|
REAL CABS1
|
||||||
EXTERNAL SCABS1
|
* ..
|
||||||
|
* .. Statement Function definitions ..
|
||||||
|
CABS1(CDUM) = ABS(REAL(CDUM)) + ABS(AIMAG(CDUM))
|
||||||
* ..
|
* ..
|
||||||
IF (N.LE.0) RETURN
|
IF (N.LE.0) RETURN
|
||||||
IF (SCABS1(CA).EQ.0.0E+0) RETURN
|
IF (CABS1(CA).EQ.0.0E+0) RETURN
|
||||||
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
|
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
|
||||||
*
|
*
|
||||||
* code for both increments equal to 1
|
* code for both increments equal to 1
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CCOPY(N,CX,INCX,CY,INCY)
|
SUBROUTINE CCOPY(N,CX,INCX,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -80,6 +80,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY)
|
COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -80,6 +80,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY)
|
COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -187,6 +187,7 @@
|
|||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,
|
SUBROUTINE CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,
|
||||||
+ BETA,Y,INCY)
|
+ BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+29
-7
@@ -35,6 +35,16 @@
|
|||||||
*>
|
*>
|
||||||
*> alpha and beta are scalars, and A, B and C are matrices, with op( A )
|
*> alpha and beta are scalars, and A, B and C are matrices, with op( A )
|
||||||
*> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
|
*> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
|
||||||
|
*>
|
||||||
|
*> Note: if alpha and/or beta is zero, some parts of the matrix-matrix
|
||||||
|
*> operations are not performed. This results in the following NaN/Inf
|
||||||
|
*> propagation quirks:
|
||||||
|
*>
|
||||||
|
*> 1. If alpha is zero, NaNs or Infs in A or B do not affect the result.
|
||||||
|
*> 2. If both alpha and beta are zero, then a zero matrix is returned in C,
|
||||||
|
*> irrespective of any NaNs or Infs in A, B or C.
|
||||||
|
*> 3. If only beta is zero, alpha*op( A )*op( B ) is returned, irrespective
|
||||||
|
*> of any NaNs or Infs in C.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
@@ -92,7 +102,9 @@
|
|||||||
*> \param[in] ALPHA
|
*> \param[in] ALPHA
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> ALPHA is COMPLEX
|
*> ALPHA is COMPLEX
|
||||||
*> On entry, ALPHA specifies the scalar alpha.
|
*> On entry, ALPHA specifies the scalar alpha. If ALPHA is zero the
|
||||||
|
*> values in A and B do not affect the result. This also means that
|
||||||
|
*> NaN/Inf propagation from A and B is inhibited if ALPHA is zero.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] A
|
*> \param[in] A
|
||||||
@@ -102,7 +114,10 @@
|
|||||||
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
||||||
*> part of the array A must contain the matrix A, otherwise
|
*> part of the array A must contain the matrix A, otherwise
|
||||||
*> the leading k by m part of the array A must contain the
|
*> the leading k by m part of the array A must contain the
|
||||||
*> matrix A.
|
*> matrix A, except if ALPHA is zero.
|
||||||
|
*> If ALPHA is zero, none of the values in A affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if ALPHA is zero,
|
||||||
|
*> the matrix elements of A need not be initialized by the caller.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] LDA
|
*> \param[in] LDA
|
||||||
@@ -121,7 +136,10 @@
|
|||||||
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
||||||
*> part of the array B must contain the matrix B, otherwise
|
*> part of the array B must contain the matrix B, otherwise
|
||||||
*> the leading n by k part of the array B must contain the
|
*> the leading n by k part of the array B must contain the
|
||||||
*> matrix B.
|
*> matrix B, except if ALPHA is zero.
|
||||||
|
*> If ALPHA is zero, none of the values in B affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if ALPHA is zero,
|
||||||
|
*> the matrix elements of B need not be initialized by the caller.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] LDB
|
*> \param[in] LDB
|
||||||
@@ -136,16 +154,19 @@
|
|||||||
*> \param[in] BETA
|
*> \param[in] BETA
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> BETA is COMPLEX
|
*> BETA is COMPLEX
|
||||||
*> On entry, BETA specifies the scalar beta. When BETA is
|
*> On entry, BETA specifies the scalar beta. If BETA is zero the
|
||||||
*> supplied as zero then C need not be set on input.
|
*> values in C do not affect the result. This also means that
|
||||||
|
*> NaN/Inf propagation from C is inhibited if BETA is zero.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] C
|
*> \param[in,out] C
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> C is COMPLEX array, dimension ( LDC, N )
|
*> C is COMPLEX array, dimension ( LDC, N )
|
||||||
*> Before entry, the leading m by n part of the array C must
|
*> Before entry, the leading m by n part of the array C must
|
||||||
*> contain the matrix C, except when beta is zero, in which
|
*> contain the matrix C, except if beta is zero.
|
||||||
*> case C need not be set on entry.
|
*> If beta is zero, none of the values in C affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if beta is zero,
|
||||||
|
*> the matrix elements of C need not be initialized by the caller.
|
||||||
*> On exit, the array C is overwritten by the m by n matrix
|
*> On exit, the array C is overwritten by the m by n matrix
|
||||||
*> ( alpha*op( A )*op( B ) + beta*C ).
|
*> ( alpha*op( A )*op( B ) + beta*C ).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
@@ -185,6 +206,7 @@
|
|||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,
|
SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,
|
||||||
+ BETA,C,LDC)
|
+ BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+3
-3
@@ -50,9 +50,9 @@
|
|||||||
*> On entry, UPLO specifies whether the lower or the upper
|
*> On entry, UPLO specifies whether the lower or the upper
|
||||||
*> triangular part of C is access and updated.
|
*> triangular part of C is access and updated.
|
||||||
*>
|
*>
|
||||||
*> UPLO = 'L' or 'l', the lower tringular part of C is used.
|
*> UPLO = 'L' or 'l', the lower triangular part of C is used.
|
||||||
*>
|
*>
|
||||||
*> UPLO = 'U' or 'u', the upper tringular part of C is used.
|
*> UPLO = 'U' or 'u', the upper triangular part of C is used.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
*> \param[in] TRANSA
|
*> \param[in] TRANSA
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
*> Before entry, the leading n by n part of the array C must
|
*> Before entry, the leading n by n part of the array C must
|
||||||
*> contain the matrix C, except when beta is zero, in which
|
*> contain the matrix C, except when beta is zero, in which
|
||||||
*> case C need not be set on entry.
|
*> case C need not be set on entry.
|
||||||
*> On exit, the upper or lower trinangular part of the matrix
|
*> On exit, the upper or lower triangular part of the matrix
|
||||||
*> C is overwritten by the n by n matrix
|
*> C is overwritten by the n by n matrix
|
||||||
*> ( alpha*op( A )*op( B ) + beta*C ).
|
*> ( alpha*op( A )*op( B ) + beta*C ).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
|||||||
@@ -157,6 +157,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -184,6 +184,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -188,6 +188,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -151,6 +151,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -132,6 +132,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHER(UPLO,N,ALPHA,X,INCX,A,LDA)
|
SUBROUTINE CHER(UPLO,N,ALPHA,X,INCX,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -147,6 +147,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -194,6 +194,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -170,6 +170,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -146,6 +146,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
|
SUBROUTINE CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHPR(UPLO,N,ALPHA,X,INCX,AP)
|
SUBROUTINE CHPR(UPLO,N,ALPHA,X,INCX,AP)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -142,6 +142,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
|
SUBROUTINE CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -86,6 +86,7 @@
|
|||||||
!
|
!
|
||||||
! =====================================================================
|
! =====================================================================
|
||||||
subroutine CROTG( a, b, c, s )
|
subroutine CROTG( a, b, c, s )
|
||||||
|
implicit none
|
||||||
integer, parameter :: wp = kind(1.e0)
|
integer, parameter :: wp = kind(1.e0)
|
||||||
!
|
!
|
||||||
! -- Reference BLAS level1 routine --
|
! -- Reference BLAS level1 routine --
|
||||||
|
|||||||
@@ -75,6 +75,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSCAL(N,CA,CX,INCX)
|
SUBROUTINE CSCAL(N,CA,CX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -95,6 +95,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSROT( N, CX, INCX, CY, INCY, C, S )
|
SUBROUTINE CSROT( N, CX, INCX, CY, INCY, C, S )
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -75,6 +75,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSSCAL(N,SA,CX,INCX)
|
SUBROUTINE CSSCAL(N,SA,CX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSWAP(N,CX,INCX,CY,INCY)
|
SUBROUTINE CSWAP(N,CX,INCX,CY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -186,6 +186,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -185,6 +185,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -164,6 +164,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+29
-40
@@ -183,6 +183,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
SUBROUTINE CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -197,10 +198,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -271,28 +268,24 @@
|
|||||||
KPLUS1 = K + 1
|
KPLUS1 = K + 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
DO 10 I = MAX(1,J-K),J - 1
|
||||||
DO 10 I = MAX(1,J-K),J - 1
|
X(I) = X(I) + TEMP*A(L+I,J)
|
||||||
X(I) = X(I) + TEMP*A(L+I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(KPLUS1,J)
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
DO 30 I = MAX(1,J-K),J - 1
|
||||||
DO 30 I = MAX(1,J-K),J - 1
|
X(IX) = X(IX) + TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(L+I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(KPLUS1,J)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
IF (J.GT.K) KX = KX + INCX
|
IF (J.GT.K) KX = KX + INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -300,29 +293,25 @@
|
|||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
L = 1 - J
|
||||||
L = 1 - J
|
DO 50 I = MIN(N,J+K),J + 1,-1
|
||||||
DO 50 I = MIN(N,J+K),J + 1,-1
|
X(I) = X(I) + TEMP*A(L+I,J)
|
||||||
X(I) = X(I) + TEMP*A(L+I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(1,J)
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
L = 1 - J
|
||||||
L = 1 - J
|
DO 70 I = MIN(N,J+K),J + 1,-1
|
||||||
DO 70 I = MIN(N,J+K),J + 1,-1
|
X(IX) = X(IX) + TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(L+I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(1,J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
IF ((N-J).GE.K) KX = KX - INCX
|
IF ((N-J).GE.K) KX = KX - INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+29
-40
@@ -186,6 +186,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
SUBROUTINE CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -200,10 +201,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -274,59 +271,51 @@
|
|||||||
KPLUS1 = K + 1
|
KPLUS1 = K + 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
IF (NOUNIT) X(J) = X(J)/A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(KPLUS1,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = J - 1,MAX(1,J-K),-1
|
||||||
DO 10 I = J - 1,MAX(1,J-K),-1
|
X(I) = X(I) - TEMP*A(L+I,J)
|
||||||
X(I) = X(I) - TEMP*A(L+I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
KX = KX - INCX
|
KX = KX - INCX
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IX = KX
|
||||||
IX = KX
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
IF (NOUNIT) X(JX) = X(JX)/A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(KPLUS1,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
DO 30 I = J - 1,MAX(1,J-K),-1
|
||||||
DO 30 I = J - 1,MAX(1,J-K),-1
|
X(IX) = X(IX) - TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(L+I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
L = 1 - J
|
||||||
L = 1 - J
|
IF (NOUNIT) X(J) = X(J)/A(1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(1,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = J + 1,MIN(N,J+K)
|
||||||
DO 50 I = J + 1,MIN(N,J+K)
|
X(I) = X(I) - TEMP*A(L+I,J)
|
||||||
X(I) = X(I) - TEMP*A(L+I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
KX = KX + INCX
|
KX = KX + INCX
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IX = KX
|
||||||
IX = KX
|
L = 1 - J
|
||||||
L = 1 - J
|
IF (NOUNIT) X(JX) = X(JX)/A(1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(1,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
DO 70 I = J + 1,MIN(N,J+K)
|
||||||
DO 70 I = J + 1,MIN(N,J+K)
|
X(IX) = X(IX) - TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(L+I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+29
-40
@@ -139,6 +139,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
SUBROUTINE CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -153,10 +154,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -223,29 +220,25 @@
|
|||||||
KK = 1
|
KK = 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK
|
||||||
K = KK
|
DO 10 I = 1,J - 1
|
||||||
DO 10 I = 1,J - 1
|
X(I) = X(I) + TEMP*AP(K)
|
||||||
X(I) = X(I) + TEMP*AP(K)
|
K = K + 1
|
||||||
K = K + 1
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*AP(KK+J-1)
|
||||||
IF (NOUNIT) X(J) = X(J)*AP(KK+J-1)
|
|
||||||
END IF
|
|
||||||
KK = KK + J
|
KK = KK + J
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 30 K = KK,KK + J - 2
|
||||||
DO 30 K = KK,KK + J - 2
|
X(IX) = X(IX) + TEMP*AP(K)
|
||||||
X(IX) = X(IX) + TEMP*AP(K)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*AP(KK+J-1)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*AP(KK+J-1)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
KK = KK + J
|
KK = KK + J
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -254,30 +247,26 @@
|
|||||||
KK = (N* (N+1))/2
|
KK = (N* (N+1))/2
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK
|
||||||
K = KK
|
DO 50 I = N,J + 1,-1
|
||||||
DO 50 I = N,J + 1,-1
|
X(I) = X(I) + TEMP*AP(K)
|
||||||
X(I) = X(I) + TEMP*AP(K)
|
K = K - 1
|
||||||
K = K - 1
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*AP(KK-N+J)
|
||||||
IF (NOUNIT) X(J) = X(J)*AP(KK-N+J)
|
|
||||||
END IF
|
|
||||||
KK = KK - (N-J+1)
|
KK = KK - (N-J+1)
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 70 K = KK,KK - (N- (J+1)),-1
|
||||||
DO 70 K = KK,KK - (N- (J+1)),-1
|
X(IX) = X(IX) + TEMP*AP(K)
|
||||||
X(IX) = X(IX) + TEMP*AP(K)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*AP(KK-N+J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*AP(KK-N+J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
KK = KK - (N-J+1)
|
KK = KK - (N-J+1)
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+29
-40
@@ -141,6 +141,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
SUBROUTINE CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -155,10 +156,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -225,29 +222,25 @@
|
|||||||
KK = (N* (N+1))/2
|
KK = (N* (N+1))/2
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
||||||
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK - 1
|
||||||
K = KK - 1
|
DO 10 I = J - 1,1,-1
|
||||||
DO 10 I = J - 1,1,-1
|
X(I) = X(I) - TEMP*AP(K)
|
||||||
X(I) = X(I) - TEMP*AP(K)
|
K = K - 1
|
||||||
K = K - 1
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
KK = KK - J
|
KK = KK - J
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX + (N-1)*INCX
|
JX = KX + (N-1)*INCX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 30 K = KK - 1,KK - J + 1,-1
|
||||||
DO 30 K = KK - 1,KK - J + 1,-1
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
X(IX) = X(IX) - TEMP*AP(K)
|
||||||
X(IX) = X(IX) - TEMP*AP(K)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
KK = KK - J
|
KK = KK - J
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -256,29 +249,25 @@
|
|||||||
KK = 1
|
KK = 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
||||||
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK + 1
|
||||||
K = KK + 1
|
DO 50 I = J + 1,N
|
||||||
DO 50 I = J + 1,N
|
X(I) = X(I) - TEMP*AP(K)
|
||||||
X(I) = X(I) - TEMP*AP(K)
|
K = K + 1
|
||||||
K = K + 1
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
KK = KK + (N-J+1)
|
KK = KK + (N-J+1)
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 70 K = KK + 1,KK + N - J
|
||||||
DO 70 K = KK + 1,KK + N - J
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
X(IX) = X(IX) - TEMP*AP(K)
|
||||||
X(IX) = X(IX) - TEMP*AP(K)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
KK = KK + (N-J+1)
|
KK = KK + (N-J+1)
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+35
-46
@@ -174,6 +174,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
SUBROUTINE CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -275,27 +276,23 @@
|
|||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 50 J = 1,N
|
DO 50 J = 1,N
|
||||||
DO 40 K = 1,M
|
DO 40 K = 1,M
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*B(K,J)
|
||||||
TEMP = ALPHA*B(K,J)
|
DO 30 I = 1,K - 1
|
||||||
DO 30 I = 1,K - 1
|
B(I,J) = B(I,J) + TEMP*A(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*A(I,K)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
||||||
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
B(K,J) = TEMP
|
||||||
B(K,J) = TEMP
|
|
||||||
END IF
|
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
DO 70 K = M,1,-1
|
DO 70 K = M,1,-1
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*B(K,J)
|
||||||
TEMP = ALPHA*B(K,J)
|
B(K,J) = TEMP
|
||||||
B(K,J) = TEMP
|
IF (NOUNIT) B(K,J) = B(K,J)*A(K,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)*A(K,K)
|
DO 60 I = K + 1,M
|
||||||
DO 60 I = K + 1,M
|
B(I,J) = B(I,J) + TEMP*A(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*A(I,K)
|
60 CONTINUE
|
||||||
60 CONTINUE
|
|
||||||
END IF
|
|
||||||
70 CONTINUE
|
70 CONTINUE
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -354,12 +351,10 @@
|
|||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = TEMP*B(I,J)
|
||||||
170 CONTINUE
|
170 CONTINUE
|
||||||
DO 190 K = 1,J - 1
|
DO 190 K = 1,J - 1
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*A(K,J)
|
||||||
TEMP = ALPHA*A(K,J)
|
DO 180 I = 1,M
|
||||||
DO 180 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
180 CONTINUE
|
||||||
180 CONTINUE
|
|
||||||
END IF
|
|
||||||
190 CONTINUE
|
190 CONTINUE
|
||||||
200 CONTINUE
|
200 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
@@ -370,12 +365,10 @@
|
|||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = TEMP*B(I,J)
|
||||||
210 CONTINUE
|
210 CONTINUE
|
||||||
DO 230 K = J + 1,N
|
DO 230 K = J + 1,N
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*A(K,J)
|
||||||
TEMP = ALPHA*A(K,J)
|
DO 220 I = 1,M
|
||||||
DO 220 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
220 CONTINUE
|
||||||
220 CONTINUE
|
|
||||||
END IF
|
|
||||||
230 CONTINUE
|
230 CONTINUE
|
||||||
240 CONTINUE
|
240 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -386,16 +379,14 @@
|
|||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 280 K = 1,N
|
DO 280 K = 1,N
|
||||||
DO 260 J = 1,K - 1
|
DO 260 J = 1,K - 1
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
IF (NOCONJ) THEN
|
||||||
IF (NOCONJ) THEN
|
TEMP = ALPHA*A(J,K)
|
||||||
TEMP = ALPHA*A(J,K)
|
ELSE
|
||||||
ELSE
|
TEMP = ALPHA*CONJG(A(J,K))
|
||||||
TEMP = ALPHA*CONJG(A(J,K))
|
|
||||||
END IF
|
|
||||||
DO 250 I = 1,M
|
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
|
||||||
250 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
|
DO 250 I = 1,M
|
||||||
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
|
250 CONTINUE
|
||||||
260 CONTINUE
|
260 CONTINUE
|
||||||
TEMP = ALPHA
|
TEMP = ALPHA
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
@@ -414,16 +405,14 @@
|
|||||||
ELSE
|
ELSE
|
||||||
DO 320 K = N,1,-1
|
DO 320 K = N,1,-1
|
||||||
DO 300 J = K + 1,N
|
DO 300 J = K + 1,N
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
IF (NOCONJ) THEN
|
||||||
IF (NOCONJ) THEN
|
TEMP = ALPHA*A(J,K)
|
||||||
TEMP = ALPHA*A(J,K)
|
ELSE
|
||||||
ELSE
|
TEMP = ALPHA*CONJG(A(J,K))
|
||||||
TEMP = ALPHA*CONJG(A(J,K))
|
|
||||||
END IF
|
|
||||||
DO 290 I = 1,M
|
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
|
||||||
290 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
|
DO 290 I = 1,M
|
||||||
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
|
290 CONTINUE
|
||||||
300 CONTINUE
|
300 CONTINUE
|
||||||
TEMP = ALPHA
|
TEMP = ALPHA
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
|
|||||||
+25
-36
@@ -144,6 +144,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
SUBROUTINE CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -158,10 +159,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -229,53 +226,45 @@
|
|||||||
IF (LSAME(UPLO,'U')) THEN
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = 1,J - 1
|
||||||
DO 10 I = 1,J - 1
|
X(I) = X(I) + TEMP*A(I,J)
|
||||||
X(I) = X(I) + TEMP*A(I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 30 I = 1,J - 1
|
||||||
DO 30 I = 1,J - 1
|
X(IX) = X(IX) + TEMP*A(I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = N,J + 1,-1
|
||||||
DO 50 I = N,J + 1,-1
|
X(I) = X(I) + TEMP*A(I,J)
|
||||||
X(I) = X(I) + TEMP*A(I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 70 I = N,J + 1,-1
|
||||||
DO 70 I = N,J + 1,-1
|
X(IX) = X(IX) + TEMP*A(I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+65
-90
@@ -177,6 +177,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -209,8 +210,6 @@
|
|||||||
LOGICAL LSIDE,NOCONJ,NOUNIT,UPPER
|
LOGICAL LSIDE,NOCONJ,NOUNIT,UPPER
|
||||||
* ..
|
* ..
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
COMPLEX ONE
|
|
||||||
PARAMETER (ONE= (1.0E+0,0.0E+0))
|
|
||||||
COMPLEX ZERO
|
COMPLEX ZERO
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
||||||
* ..
|
* ..
|
||||||
@@ -277,34 +276,26 @@
|
|||||||
*
|
*
|
||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 30 I = 1,M
|
||||||
DO 30 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
DO 50 K = M,1,-1
|
||||||
END IF
|
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
||||||
DO 50 K = M,1,-1
|
DO 40 I = 1,K - 1
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
40 CONTINUE
|
||||||
DO 40 I = 1,K - 1
|
|
||||||
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
|
||||||
40 CONTINUE
|
|
||||||
END IF
|
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 100 J = 1,N
|
DO 100 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 70 I = 1,M
|
||||||
DO 70 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
DO 90 K = 1,M
|
||||||
END IF
|
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
||||||
DO 90 K = 1,M
|
DO 80 I = K + 1,M
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
80 CONTINUE
|
||||||
DO 80 I = K + 1,M
|
|
||||||
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
|
||||||
80 CONTINUE
|
|
||||||
END IF
|
|
||||||
90 CONTINUE
|
90 CONTINUE
|
||||||
100 CONTINUE
|
100 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -358,43 +349,33 @@
|
|||||||
*
|
*
|
||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 230 J = 1,N
|
DO 230 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 190 I = 1,M
|
||||||
DO 190 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
190 CONTINUE
|
||||||
190 CONTINUE
|
|
||||||
END IF
|
|
||||||
DO 210 K = 1,J - 1
|
DO 210 K = 1,J - 1
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
DO 200 I = 1,M
|
||||||
DO 200 I = 1,M
|
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
||||||
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
200 CONTINUE
|
||||||
200 CONTINUE
|
|
||||||
END IF
|
|
||||||
210 CONTINUE
|
210 CONTINUE
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(J,J)
|
|
||||||
DO 220 I = 1,M
|
DO 220 I = 1,M
|
||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = B(I,J)/A(J,J)
|
||||||
220 CONTINUE
|
220 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
230 CONTINUE
|
230 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 280 J = N,1,-1
|
DO 280 J = N,1,-1
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 240 I = 1,M
|
||||||
DO 240 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
240 CONTINUE
|
||||||
240 CONTINUE
|
|
||||||
END IF
|
|
||||||
DO 260 K = J + 1,N
|
DO 260 K = J + 1,N
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
DO 250 I = 1,M
|
||||||
DO 250 I = 1,M
|
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
||||||
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
250 CONTINUE
|
||||||
250 CONTINUE
|
|
||||||
END IF
|
|
||||||
260 CONTINUE
|
260 CONTINUE
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(J,J)
|
|
||||||
DO 270 I = 1,M
|
DO 270 I = 1,M
|
||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = B(I,J)/A(J,J)
|
||||||
270 CONTINUE
|
270 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
280 CONTINUE
|
280 CONTINUE
|
||||||
@@ -408,61 +389,55 @@
|
|||||||
DO 330 K = N,1,-1
|
DO 330 K = N,1,-1
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
IF (NOCONJ) THEN
|
IF (NOCONJ) THEN
|
||||||
TEMP = ONE/A(K,K)
|
DO 290 I = 1,M
|
||||||
|
B(I,K) = B(I,K)/A(K,K)
|
||||||
|
290 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
TEMP = ONE/CONJG(A(K,K))
|
DO 390 I = 1,M
|
||||||
|
B(I,K) = B(I,K)/CONJG(A(K,K))
|
||||||
|
390 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 290 I = 1,M
|
|
||||||
B(I,K) = TEMP*B(I,K)
|
|
||||||
290 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
DO 310 J = 1,K - 1
|
DO 310 J = 1,K - 1
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
IF (NOCONJ) THEN
|
||||||
IF (NOCONJ) THEN
|
TEMP = A(J,K)
|
||||||
TEMP = A(J,K)
|
ELSE
|
||||||
ELSE
|
TEMP = CONJG(A(J,K))
|
||||||
TEMP = CONJG(A(J,K))
|
|
||||||
END IF
|
|
||||||
DO 300 I = 1,M
|
|
||||||
B(I,J) = B(I,J) - TEMP*B(I,K)
|
|
||||||
300 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
|
DO 300 I = 1,M
|
||||||
|
B(I,J) = B(I,J) - TEMP*B(I,K)
|
||||||
|
300 CONTINUE
|
||||||
310 CONTINUE
|
310 CONTINUE
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 320 I = 1,M
|
||||||
DO 320 I = 1,M
|
B(I,K) = ALPHA*B(I,K)
|
||||||
B(I,K) = ALPHA*B(I,K)
|
320 CONTINUE
|
||||||
320 CONTINUE
|
|
||||||
END IF
|
|
||||||
330 CONTINUE
|
330 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 380 K = 1,N
|
DO 380 K = 1,N
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
IF (NOCONJ) THEN
|
IF (NOCONJ) THEN
|
||||||
TEMP = ONE/A(K,K)
|
DO 340 I = 1,M
|
||||||
|
B(I,K) = B(I,K)/A(K,K)
|
||||||
|
340 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
TEMP = ONE/CONJG(A(K,K))
|
DO 400 I = 1,M
|
||||||
|
B(I,K) = B(I,K)/CONJG(A(K,K))
|
||||||
|
400 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 340 I = 1,M
|
|
||||||
B(I,K) = TEMP*B(I,K)
|
|
||||||
340 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
DO 360 J = K + 1,N
|
DO 360 J = K + 1,N
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
IF (NOCONJ) THEN
|
||||||
IF (NOCONJ) THEN
|
TEMP = A(J,K)
|
||||||
TEMP = A(J,K)
|
ELSE
|
||||||
ELSE
|
TEMP = CONJG(A(J,K))
|
||||||
TEMP = CONJG(A(J,K))
|
|
||||||
END IF
|
|
||||||
DO 350 I = 1,M
|
|
||||||
B(I,J) = B(I,J) - TEMP*B(I,K)
|
|
||||||
350 CONTINUE
|
|
||||||
END IF
|
END IF
|
||||||
|
DO 350 I = 1,M
|
||||||
|
B(I,J) = B(I,J) - TEMP*B(I,K)
|
||||||
|
350 CONTINUE
|
||||||
360 CONTINUE
|
360 CONTINUE
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 370 I = 1,M
|
||||||
DO 370 I = 1,M
|
B(I,K) = ALPHA*B(I,K)
|
||||||
B(I,K) = ALPHA*B(I,K)
|
370 CONTINUE
|
||||||
370 CONTINUE
|
|
||||||
END IF
|
|
||||||
380 CONTINUE
|
380 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+25
-36
@@ -146,6 +146,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
SUBROUTINE CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -160,10 +161,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
COMPLEX ZERO
|
|
||||||
PARAMETER (ZERO= (0.0E+0,0.0E+0))
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
COMPLEX TEMP
|
COMPLEX TEMP
|
||||||
@@ -231,52 +228,44 @@
|
|||||||
IF (LSAME(UPLO,'U')) THEN
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = J - 1,1,-1
|
||||||
DO 10 I = J - 1,1,-1
|
X(I) = X(I) - TEMP*A(I,J)
|
||||||
X(I) = X(I) - TEMP*A(I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX + (N-1)*INCX
|
JX = KX + (N-1)*INCX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 30 I = J - 1,1,-1
|
||||||
DO 30 I = J - 1,1,-1
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
X(IX) = X(IX) - TEMP*A(I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(I,J)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = J + 1,N
|
||||||
DO 50 I = J + 1,N
|
X(I) = X(I) - TEMP*A(I,J)
|
||||||
X(I) = X(I) - TEMP*A(I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 70 I = J + 1,N
|
||||||
DO 70 I = J + 1,N
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
X(IX) = X(IX) - TEMP*A(I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(I,J)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -0,0 +1,149 @@
|
|||||||
|
*> \brief \b DAXPBY
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* DOUBLE PRECISION DA,DB
|
||||||
|
* INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION DX(*),DY(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DAXPBY constant times a vector plus constant times a vector.
|
||||||
|
*>
|
||||||
|
*> Y = ALPHA * X + BETA * Y
|
||||||
|
*>
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DA
|
||||||
|
*> \verbatim
|
||||||
|
*> DA is DOUBLE PRECISION
|
||||||
|
*> On entry, DA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DX
|
||||||
|
*> \verbatim
|
||||||
|
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DB
|
||||||
|
*> \verbatim
|
||||||
|
*> DB is DOUBLE PRECISION
|
||||||
|
*> On entry, DB specifies the scalar beta.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] DY
|
||||||
|
*> \verbatim
|
||||||
|
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of DY
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*> \author Martin Koehler, MPI Magdeburg
|
||||||
|
*
|
||||||
|
*> \ingroup axpby
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level1 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION DA,DB
|
||||||
|
INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION DX(*),DY(*)
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines
|
||||||
|
EXTERNAL DSCAL
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I,IX,IY,M,MP1
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MOD
|
||||||
|
* ..
|
||||||
|
IF (N.LE.0) RETURN
|
||||||
|
|
||||||
|
* Scale if DA.EQ.0
|
||||||
|
IF (DA.EQ.0.0D0 .AND. DB.NE.0.0D0) THEN
|
||||||
|
CALL DSCAL(N, DB, DY, INCY)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
|
||||||
|
*
|
||||||
|
* code for both increments equal to 1
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
DO I = 1,N
|
||||||
|
DY(I) = DB*DY(I) + DA*DX(I)
|
||||||
|
END DO
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* code for unequal increments or equal increments
|
||||||
|
* not equal to 1
|
||||||
|
*
|
||||||
|
IX = 1
|
||||||
|
IY = 1
|
||||||
|
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
|
||||||
|
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
|
||||||
|
DO I = 1,N
|
||||||
|
DY(IY) = DB*DY(IY) + DA*DX(IX)
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
END DO
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DAXPBY
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -86,6 +86,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DCABS1(Z)
|
DOUBLE PRECISION FUNCTION DCABS1(Z)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -185,6 +185,7 @@
|
|||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,
|
SUBROUTINE DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,
|
||||||
+ BETA,Y,INCY)
|
+ BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+35
-7
@@ -35,6 +35,16 @@
|
|||||||
*>
|
*>
|
||||||
*> alpha and beta are scalars, and A, B and C are matrices, with op( A )
|
*> alpha and beta are scalars, and A, B and C are matrices, with op( A )
|
||||||
*> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
|
*> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
|
||||||
|
*>
|
||||||
|
*> Note: if alpha and/or beta is zero, some parts of the matrix-matrix
|
||||||
|
*> operations are not performed. This results in the following NaN/Inf
|
||||||
|
*> propagation quirks:
|
||||||
|
*>
|
||||||
|
*> 1. If alpha is zero, NaNs or Infs in A or B do not affect the result.
|
||||||
|
*> 2. If both alpha and beta are zero, then a zero matrix is returned in C,
|
||||||
|
*> irrespective of any NaNs or Infs in A, B or C.
|
||||||
|
*> 3. If only beta is zero, alpha*op( A )*op( B ) is returned, irrespective
|
||||||
|
*> of any NaNs or Infs in C.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
@@ -51,6 +61,9 @@
|
|||||||
*> TRANSA = 'T' or 't', op( A ) = A**T.
|
*> TRANSA = 'T' or 't', op( A ) = A**T.
|
||||||
*>
|
*>
|
||||||
*> TRANSA = 'C' or 'c', op( A ) = A**T.
|
*> TRANSA = 'C' or 'c', op( A ) = A**T.
|
||||||
|
*>
|
||||||
|
*> Note: TRANSA = 'C' is supported for the sake of API consistency
|
||||||
|
*> between all ?GEMM variants.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] TRANSB
|
*> \param[in] TRANSB
|
||||||
@@ -64,6 +77,9 @@
|
|||||||
*> TRANSB = 'T' or 't', op( B ) = B**T.
|
*> TRANSB = 'T' or 't', op( B ) = B**T.
|
||||||
*>
|
*>
|
||||||
*> TRANSB = 'C' or 'c', op( B ) = B**T.
|
*> TRANSB = 'C' or 'c', op( B ) = B**T.
|
||||||
|
*>
|
||||||
|
*> Note: TRANSB = 'C' is supported for the sake of API consistency
|
||||||
|
*> between all ?GEMM variants.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] M
|
*> \param[in] M
|
||||||
@@ -92,7 +108,9 @@
|
|||||||
*> \param[in] ALPHA
|
*> \param[in] ALPHA
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> ALPHA is DOUBLE PRECISION.
|
*> ALPHA is DOUBLE PRECISION.
|
||||||
*> On entry, ALPHA specifies the scalar alpha.
|
*> On entry, ALPHA specifies the scalar alpha. If ALPHA is zero the
|
||||||
|
*> values in A and B do not affect the result. This also means that
|
||||||
|
*> NaN/Inf propagation from A and B is inhibited if ALPHA is zero.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] A
|
*> \param[in] A
|
||||||
@@ -102,7 +120,10 @@
|
|||||||
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
||||||
*> part of the array A must contain the matrix A, otherwise
|
*> part of the array A must contain the matrix A, otherwise
|
||||||
*> the leading k by m part of the array A must contain the
|
*> the leading k by m part of the array A must contain the
|
||||||
*> matrix A.
|
*> matrix A, except if ALPHA is zero.
|
||||||
|
*> If ALPHA is zero, none of the values in A affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if ALPHA is zero,
|
||||||
|
*> the matrix elements of A need not be initialized by the caller.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] LDA
|
*> \param[in] LDA
|
||||||
@@ -121,7 +142,10 @@
|
|||||||
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
||||||
*> part of the array B must contain the matrix B, otherwise
|
*> part of the array B must contain the matrix B, otherwise
|
||||||
*> the leading n by k part of the array B must contain the
|
*> the leading n by k part of the array B must contain the
|
||||||
*> matrix B.
|
*> matrix B, except if ALPHA is zero.
|
||||||
|
*> If ALPHA is zero, none of the values in B affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if ALPHA is zero,
|
||||||
|
*> the matrix elements of B need not be initialized by the caller.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] LDB
|
*> \param[in] LDB
|
||||||
@@ -136,16 +160,19 @@
|
|||||||
*> \param[in] BETA
|
*> \param[in] BETA
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> BETA is DOUBLE PRECISION.
|
*> BETA is DOUBLE PRECISION.
|
||||||
*> On entry, BETA specifies the scalar beta. When BETA is
|
*> On entry, BETA specifies the scalar beta. If BETA is zero the
|
||||||
*> supplied as zero then C need not be set on input.
|
*> values in C do not affect the result. This also means that
|
||||||
|
*> NaN/Inf propagation from C is inhibited if BETA is zero.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] C
|
*> \param[in,out] C
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> C is DOUBLE PRECISION array, dimension ( LDC, N )
|
*> C is DOUBLE PRECISION array, dimension ( LDC, N )
|
||||||
*> Before entry, the leading m by n part of the array C must
|
*> Before entry, the leading m by n part of the array C must
|
||||||
*> contain the matrix C, except when beta is zero, in which
|
*> contain the matrix C, except if beta is zero.
|
||||||
*> case C need not be set on entry.
|
*> If beta is zero, none of the values in C affect the result, even
|
||||||
|
*> if they are NaN/Inf. This also implies that if beta is zero,
|
||||||
|
*> the matrix elements of C need not be initialized by the caller.
|
||||||
*> On exit, the array C is overwritten by the m by n matrix
|
*> On exit, the array C is overwritten by the m by n matrix
|
||||||
*> ( alpha*op( A )*op( B ) + beta*C ).
|
*> ( alpha*op( A )*op( B ) + beta*C ).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
@@ -185,6 +212,7 @@
|
|||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,
|
SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,
|
||||||
+ BETA,C,LDC)
|
+ BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+4
-4
@@ -50,9 +50,9 @@
|
|||||||
*> On entry, UPLO specifies whether the lower or the upper
|
*> On entry, UPLO specifies whether the lower or the upper
|
||||||
*> triangular part of C is access and updated.
|
*> triangular part of C is access and updated.
|
||||||
*>
|
*>
|
||||||
*> UPLO = 'L' or 'l', the lower tringular part of C is used.
|
*> UPLO = 'L' or 'l', the lower triangular part of C is used.
|
||||||
*>
|
*>
|
||||||
*> UPLO = 'U' or 'u', the upper tringular part of C is used.
|
*> UPLO = 'U' or 'u', the upper triangular part of C is used.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
*> \param[in] TRANSA
|
*> \param[in] TRANSA
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
*> Before entry, the leading n by n part of the array C must
|
*> Before entry, the leading n by n part of the array C must
|
||||||
*> contain the matrix C, except when beta is zero, in which
|
*> contain the matrix C, except when beta is zero, in which
|
||||||
*> case C need not be set on entry.
|
*> case C need not be set on entry.
|
||||||
*> On exit, the upper or lower trinangular part of the matrix
|
*> On exit, the upper or lower triangular part of the matrix
|
||||||
*> C is overwritten by the n by n matrix
|
*> C is overwritten by the n by n matrix
|
||||||
*> ( alpha*op( A )*op( B ) + beta*C ).
|
*> ( alpha*op( A )*op( B ) + beta*C ).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
@@ -426,6 +426,6 @@
|
|||||||
*
|
*
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
* End of SGEMM
|
* End of DGEMMTR
|
||||||
*
|
*
|
||||||
END
|
END
|
||||||
|
|||||||
@@ -155,6 +155,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+3
-2
@@ -85,11 +85,12 @@
|
|||||||
!> \endverbatim
|
!> \endverbatim
|
||||||
!>
|
!>
|
||||||
! =====================================================================
|
! =====================================================================
|
||||||
function DNRM2( n, x, incx )
|
function DNRM2( n, x, incx )
|
||||||
|
implicit none
|
||||||
integer, parameter :: wp = kind(1.d0)
|
integer, parameter :: wp = kind(1.d0)
|
||||||
real(wp) :: DNRM2
|
real(wp) :: DNRM2
|
||||||
!
|
!
|
||||||
! -- Reference BLAS level1 routine (version 3.9.1) --
|
! -- Reference BLAS level1 routine --
|
||||||
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
! March 2021
|
! March 2021
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DROT(N,DX,INCX,DY,INCY,C,S)
|
SUBROUTINE DROT(N,DX,INCX,DY,INCY,C,S)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
!
|
!
|
||||||
! =====================================================================
|
! =====================================================================
|
||||||
subroutine DROTG( a, b, c, s )
|
subroutine DROTG( a, b, c, s )
|
||||||
|
implicit none
|
||||||
integer, parameter :: wp = kind(1.d0)
|
integer, parameter :: wp = kind(1.d0)
|
||||||
!
|
!
|
||||||
! -- Reference BLAS level1 routine --
|
! -- Reference BLAS level1 routine --
|
||||||
|
|||||||
@@ -38,6 +38,10 @@
|
|||||||
*> H=( ) ( ) ( ) ( )
|
*> H=( ) ( ) ( ) ( )
|
||||||
*> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
|
*> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
|
||||||
*> SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM.
|
*> SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM.
|
||||||
|
*>
|
||||||
|
*> IF DFLAG IS NOT ONE OF THE LISTED ABOVE, THE BEHAVIOR IS UNDEFINED.
|
||||||
|
*> NANS IN DFLAG MAY NOT PROPAGATE TO THE OUTPUT.
|
||||||
|
*>
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
@@ -93,6 +97,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
|
SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+10
-5
@@ -24,14 +24,18 @@
|
|||||||
*> \verbatim
|
*> \verbatim
|
||||||
*>
|
*>
|
||||||
*> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS
|
*> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS
|
||||||
*> THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)*> DY2)**T.
|
*> THE SECOND COMPONENT OF THE 2-VECTOR
|
||||||
*> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS..
|
*> (DSQRT(DD1)*DX1,DSQRT(DD2)*DY2)**T
|
||||||
|
*> WITH DPARAM(1)=DFLAG.
|
||||||
*>
|
*>
|
||||||
*> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0
|
*> H HAS ONE OF THE FOLLOWING FORMS:
|
||||||
|
*>
|
||||||
|
*> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0
|
||||||
*>
|
*>
|
||||||
*> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0)
|
*> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0)
|
||||||
*> H=( ) ( ) ( ) ( )
|
*> H=( ) ( ) ( ) ( )
|
||||||
*> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
|
*> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
|
||||||
|
*>
|
||||||
*> LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22
|
*> LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22
|
||||||
*> RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE
|
*> RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE
|
||||||
*> VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.)
|
*> VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.)
|
||||||
@@ -87,6 +91,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM)
|
SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -195,7 +200,7 @@
|
|||||||
DH11 = ONE
|
DH11 = ONE
|
||||||
DH22 = ONE
|
DH22 = ONE
|
||||||
DFLAG = -ONE
|
DFLAG = -ONE
|
||||||
ELSE
|
ELSE IF (DFLAG.EQ.ONE) THEN
|
||||||
DH21 = -ONE
|
DH21 = -ONE
|
||||||
DH12 = ONE
|
DH12 = ONE
|
||||||
DFLAG = -ONE
|
DFLAG = -ONE
|
||||||
@@ -220,7 +225,7 @@
|
|||||||
DH11 = ONE
|
DH11 = ONE
|
||||||
DH22 = ONE
|
DH22 = ONE
|
||||||
DFLAG = -ONE
|
DFLAG = -ONE
|
||||||
ELSE
|
ELSE IF (DFLAG.EQ.ONE) THEN
|
||||||
DH21 = -ONE
|
DH21 = -ONE
|
||||||
DH12 = ONE
|
DH12 = ONE
|
||||||
DFLAG = -ONE
|
DFLAG = -ONE
|
||||||
|
|||||||
@@ -181,6 +181,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -76,6 +76,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSCAL(N,DA,DX,INCX)
|
SUBROUTINE DSCAL(N,DA,DX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY)
|
DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -0,0 +1,365 @@
|
|||||||
|
*> \brief \b DSKEWSYMM
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DSKEWSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* DOUBLE PRECISION ALPHA,BETA
|
||||||
|
* INTEGER LDA,LDB,LDC,M,N
|
||||||
|
* CHARACTER SIDE,UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DSKEWSYMM performs one of the matrix-matrix operations
|
||||||
|
*>
|
||||||
|
*> C := alpha*A*B + beta*C,
|
||||||
|
*>
|
||||||
|
*> or
|
||||||
|
*>
|
||||||
|
*> C := alpha*B*A + beta*C,
|
||||||
|
*>
|
||||||
|
*> where alpha and beta are scalars, A is a skew-symmetric matrix and B and
|
||||||
|
*> C are m by n matrices.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] SIDE
|
||||||
|
*> \verbatim
|
||||||
|
*> SIDE is CHARACTER*1
|
||||||
|
*> On entry, SIDE specifies whether the skew-symmetric matrix A
|
||||||
|
*> appears on the left or right in the operation as follows:
|
||||||
|
*>
|
||||||
|
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
|
||||||
|
*>
|
||||||
|
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> On entry, UPLO specifies whether the upper or lower
|
||||||
|
*> triangular part of the skew-symmetric matrix A is to be
|
||||||
|
*> referenced as follows:
|
||||||
|
*>
|
||||||
|
*> UPLO = 'U' or 'u' Only the upper triangular part of the
|
||||||
|
*> skew-symmetric matrix is to be referenced.
|
||||||
|
*>
|
||||||
|
*> UPLO = 'L' or 'l' Only the lower triangular part of the
|
||||||
|
*> skew-symmetric matrix is to be referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] M
|
||||||
|
*> \verbatim
|
||||||
|
*> M is INTEGER
|
||||||
|
*> On entry, M specifies the number of rows of the matrix C.
|
||||||
|
*> M must be at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, N specifies the number of columns of the matrix C.
|
||||||
|
*> N must be at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION
|
||||||
|
*> On entry, ALPHA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is
|
||||||
|
*> m when SIDE = 'L' or 'l' and is n otherwise.
|
||||||
|
*> Before entry with SIDE = 'L' or 'l', the m by m part of
|
||||||
|
*> the array A must contain the skew-symmetric matrix, such that
|
||||||
|
*> when UPLO = 'U' or 'u', the strictly m by m upper triangular
|
||||||
|
*> part of the array A must contain the upper triangular part
|
||||||
|
*> of the skew-symmetric matrix and the leading lower triangular
|
||||||
|
*> part of A is not referenced, and when UPLO = 'L' or 'l',
|
||||||
|
*> the strictly m by m lower triangular part of the array A
|
||||||
|
*> must contain the lower triangular part of the skew-symmetric
|
||||||
|
*> matrix and the leading upper triangular part of A is not
|
||||||
|
*> referenced.
|
||||||
|
*> Before entry with SIDE = 'R' or 'r', the n by n part of
|
||||||
|
*> the array A must contain the skew-symmetric matrix, such that
|
||||||
|
*> when UPLO = 'U' or 'u', the strictly n by n upper triangular
|
||||||
|
*> part of the array A must contain the upper triangular part
|
||||||
|
*> of the skew-symmetric matrix and the leading lower triangular
|
||||||
|
*> part of A is not referenced, and when UPLO = 'L' or 'l',
|
||||||
|
*> the strictly n by n lower triangular part of the array A
|
||||||
|
*> must contain the lower triangular part of the skew-symmetric
|
||||||
|
*> matrix and the leading upper triangular part of A is not
|
||||||
|
*> referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> On entry, LDA specifies the first dimension of A as declared
|
||||||
|
*> in the calling (sub) program. When SIDE = 'L' or 'l' then
|
||||||
|
*> LDA must be at least max( 1, m ), otherwise LDA must be at
|
||||||
|
*> least max( 1, n ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension ( LDB, N )
|
||||||
|
*> Before entry, the leading m by n part of the array B must
|
||||||
|
*> contain the matrix B.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> On entry, LDB specifies the first dimension of B as declared
|
||||||
|
*> in the calling (sub) program. LDB must be at least
|
||||||
|
*> max( 1, m ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] BETA
|
||||||
|
*> \verbatim
|
||||||
|
*> BETA is DOUBLE PRECISION.
|
||||||
|
*> On entry, BETA specifies the scalar beta. When BETA is
|
||||||
|
*> supplied as zero then C need not be set on input.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION array, dimension ( LDC, N )
|
||||||
|
*> Before entry, the leading m by n part of the array C must
|
||||||
|
*> contain the matrix C, except when beta is zero, in which
|
||||||
|
*> case C need not be set on entry.
|
||||||
|
*> On exit, the array C is overwritten by the m by n updated
|
||||||
|
*> matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDC
|
||||||
|
*> \verbatim
|
||||||
|
*> LDC is INTEGER
|
||||||
|
*> On entry, LDC specifies the first dimension of C as declared
|
||||||
|
*> in the calling (sub) program. LDC must be at least
|
||||||
|
*> max( 1, m ).
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \ingroup skewhemm
|
||||||
|
*
|
||||||
|
*> \par Further Details:
|
||||||
|
* =====================
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> Level 3 Blas routine.
|
||||||
|
*> Derived from subroutine dsymm.
|
||||||
|
*>
|
||||||
|
*> -- Written on 6-Jul-2025.
|
||||||
|
*> Shuo Zheng, China.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DSKEWSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,
|
||||||
|
+ LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level3 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION ALPHA,BETA
|
||||||
|
INTEGER LDA,LDB,LDC,M,N
|
||||||
|
CHARACTER SIDE,UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL LSAME
|
||||||
|
EXTERNAL LSAME
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION TEMP1,TEMP2
|
||||||
|
INTEGER I,INFO,J,K,NROWA
|
||||||
|
LOGICAL UPPER
|
||||||
|
* ..
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE,ZERO
|
||||||
|
PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* Set NROWA as the number of rows of A.
|
||||||
|
*
|
||||||
|
IF (LSAME(SIDE,'L')) THEN
|
||||||
|
NROWA = M
|
||||||
|
ELSE
|
||||||
|
NROWA = N
|
||||||
|
END IF
|
||||||
|
UPPER = LSAME(UPLO,'U')
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IF ((.NOT.LSAME(SIDE,'L')) .AND.
|
||||||
|
+ (.NOT.LSAME(SIDE,'R'))) THEN
|
||||||
|
INFO = 1
|
||||||
|
ELSE IF ((.NOT.UPPER) .AND.
|
||||||
|
+ (.NOT.LSAME(UPLO,'L'))) THEN
|
||||||
|
INFO = 2
|
||||||
|
ELSE IF (M.LT.0) THEN
|
||||||
|
INFO = 3
|
||||||
|
ELSE IF (N.LT.0) THEN
|
||||||
|
INFO = 4
|
||||||
|
ELSE IF (LDA.LT.MAX(1,NROWA)) THEN
|
||||||
|
INFO = 7
|
||||||
|
ELSE IF (LDB.LT.MAX(1,M)) THEN
|
||||||
|
INFO = 9
|
||||||
|
ELSE IF (LDC.LT.MAX(1,M)) THEN
|
||||||
|
INFO = 12
|
||||||
|
END IF
|
||||||
|
IF (INFO.NE.0) THEN
|
||||||
|
CALL XERBLA('DSKEWSYMM ',INFO)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF ((M.EQ.0) .OR. (N.EQ.0) .OR.
|
||||||
|
+ ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN
|
||||||
|
*
|
||||||
|
* And when alpha.eq.zero.
|
||||||
|
*
|
||||||
|
IF (ALPHA.EQ.ZERO) THEN
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 20 J = 1,N
|
||||||
|
DO 10 I = 1,M
|
||||||
|
C(I,J) = ZERO
|
||||||
|
10 CONTINUE
|
||||||
|
20 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 40 J = 1,N
|
||||||
|
DO 30 I = 1,M
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
30 CONTINUE
|
||||||
|
40 CONTINUE
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Start the operations.
|
||||||
|
*
|
||||||
|
IF (LSAME(SIDE,'L')) THEN
|
||||||
|
*
|
||||||
|
* Form C := alpha*A*B + beta*C.
|
||||||
|
*
|
||||||
|
IF (UPPER) THEN
|
||||||
|
DO 70 J = 1,N
|
||||||
|
DO 60 I = 1,M
|
||||||
|
TEMP1 = ALPHA*B(I,J)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 50 K = 1,I - 1
|
||||||
|
C(K,J) = C(K,J) + TEMP1*A(K,I)
|
||||||
|
TEMP2 = TEMP2 - B(K,J)*A(K,I)
|
||||||
|
50 CONTINUE
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
C(I,J) = ALPHA*TEMP2
|
||||||
|
ELSE
|
||||||
|
C(I,J) = BETA*C(I,J) +
|
||||||
|
+ ALPHA*TEMP2
|
||||||
|
END IF
|
||||||
|
60 CONTINUE
|
||||||
|
70 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 100 J = 1,N
|
||||||
|
DO 90 I = M,1,-1
|
||||||
|
TEMP1 = ALPHA*B(I,J)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 80 K = I + 1,M
|
||||||
|
C(K,J) = C(K,J) + TEMP1*A(K,I)
|
||||||
|
TEMP2 = TEMP2 - B(K,J)*A(K,I)
|
||||||
|
80 CONTINUE
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
C(I,J) = ALPHA*TEMP2
|
||||||
|
ELSE
|
||||||
|
C(I,J) = BETA*C(I,J) +
|
||||||
|
+ ALPHA*TEMP2
|
||||||
|
END IF
|
||||||
|
90 CONTINUE
|
||||||
|
100 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Form C := alpha*B*A + beta*C.
|
||||||
|
*
|
||||||
|
DO 170 J = 1,N
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 110 I = 1,M
|
||||||
|
C(I,J) = ZERO
|
||||||
|
110 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 120 I = 1,M
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
120 CONTINUE
|
||||||
|
END IF
|
||||||
|
DO 140 K = 1,J - 1
|
||||||
|
IF (UPPER) THEN
|
||||||
|
TEMP1 = ALPHA*A(K,J)
|
||||||
|
ELSE
|
||||||
|
TEMP1 = -ALPHA*A(J,K)
|
||||||
|
END IF
|
||||||
|
DO 130 I = 1,M
|
||||||
|
C(I,J) = C(I,J) + TEMP1*B(I,K)
|
||||||
|
130 CONTINUE
|
||||||
|
140 CONTINUE
|
||||||
|
DO 160 K = J + 1,N
|
||||||
|
IF (UPPER) THEN
|
||||||
|
TEMP1 = -ALPHA*A(J,K)
|
||||||
|
ELSE
|
||||||
|
TEMP1 = ALPHA*A(K,J)
|
||||||
|
END IF
|
||||||
|
DO 150 I = 1,M
|
||||||
|
C(I,J) = C(I,J) + TEMP1*B(I,K)
|
||||||
|
150 CONTINUE
|
||||||
|
160 CONTINUE
|
||||||
|
170 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DSKEWSYMM
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -0,0 +1,327 @@
|
|||||||
|
*> \brief \b DSKEWSYMV
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DSKEWSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* DOUBLE PRECISION ALPHA,BETA
|
||||||
|
* INTEGER INCX,INCY,LDA,N
|
||||||
|
* CHARACTER UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DSKEWSYMV performs the matrix-vector operation
|
||||||
|
*>
|
||||||
|
*> y := alpha*A*x + beta*y,
|
||||||
|
*>
|
||||||
|
*> where alpha and beta are scalars, x and y are n element vectors and
|
||||||
|
*> A is an n by n skew-symmetric matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> On entry, UPLO specifies whether the upper or lower
|
||||||
|
*> triangular part of the array A is to be referenced as
|
||||||
|
*> follows:
|
||||||
|
*>
|
||||||
|
*> UPLO = 'U' or 'u' Only the upper triangular part of A
|
||||||
|
*> is to be referenced.
|
||||||
|
*>
|
||||||
|
*> UPLO = 'L' or 'l' Only the lower triangular part of A
|
||||||
|
*> is to be referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, N specifies the order of the matrix A.
|
||||||
|
*> N must be at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION
|
||||||
|
*> On entry, ALPHA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension ( LDA, N )
|
||||||
|
*> Before entry with UPLO = 'U' or 'u', the strictly n by n
|
||||||
|
*> upper triangular part of the array A must contain the upper
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> lower triangular part of A is not referenced.
|
||||||
|
*> Before entry with UPLO = 'L' or 'l', the strictly n by n
|
||||||
|
*> lower triangular part of the array A must contain the lower
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> upper triangular part of A is not referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> On entry, LDA specifies the first dimension of A as declared
|
||||||
|
*> in the calling (sub) program. LDA must be at least
|
||||||
|
*> max( 1, n ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] X
|
||||||
|
*> \verbatim
|
||||||
|
*> X is DOUBLE PRECISION array, dimension at least
|
||||||
|
*> ( 1 + ( n - 1 )*abs( INCX ) ).
|
||||||
|
*> Before entry, the incremented array X must contain the n
|
||||||
|
*> element vector x.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> On entry, INCX specifies the increment for the elements of
|
||||||
|
*> X. INCX must not be zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] BETA
|
||||||
|
*> \verbatim
|
||||||
|
*> BETA is DOUBLE PRECISION.
|
||||||
|
*> On entry, BETA specifies the scalar beta. When BETA is
|
||||||
|
*> supplied as zero then Y need not be set on input.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] Y
|
||||||
|
*> \verbatim
|
||||||
|
*> Y is DOUBLE PRECISION array, dimension at least
|
||||||
|
*> ( 1 + ( n - 1 )*abs( INCY ) ).
|
||||||
|
*> Before entry, the incremented array Y must contain the n
|
||||||
|
*> element vector y. On exit, Y is overwritten by the updated
|
||||||
|
*> vector y.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> On entry, INCY specifies the increment for the elements of
|
||||||
|
*> Y. INCY must not be zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \ingroup skewhemv
|
||||||
|
*
|
||||||
|
*> \par Further Details:
|
||||||
|
* =====================
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> Level 2 Blas routine.
|
||||||
|
*> The vector and matrix arguments are not referenced when N = 0, or M = 0
|
||||||
|
*> Derived from subroutine dsymv.
|
||||||
|
*>
|
||||||
|
*> -- Written on 6-Jul-2025.
|
||||||
|
*> Shuo Zheng, China.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DSKEWSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level2 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION ALPHA,BETA
|
||||||
|
INTEGER INCX,INCY,LDA,N
|
||||||
|
CHARACTER UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE,ZERO
|
||||||
|
PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION TEMP1,TEMP2
|
||||||
|
INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL LSAME
|
||||||
|
EXTERNAL LSAME
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN
|
||||||
|
INFO = 1
|
||||||
|
ELSE IF (N.LT.0) THEN
|
||||||
|
INFO = 2
|
||||||
|
ELSE IF (LDA.LT.MAX(1,N)) THEN
|
||||||
|
INFO = 5
|
||||||
|
ELSE IF (INCX.EQ.0) THEN
|
||||||
|
INFO = 7
|
||||||
|
ELSE IF (INCY.EQ.0) THEN
|
||||||
|
INFO = 10
|
||||||
|
END IF
|
||||||
|
IF (INFO.NE.0) THEN
|
||||||
|
CALL XERBLA('DSKEWSYMV ',INFO)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF ((N.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN
|
||||||
|
*
|
||||||
|
* Set up the start points in X and Y.
|
||||||
|
*
|
||||||
|
IF (INCX.GT.0) THEN
|
||||||
|
KX = 1
|
||||||
|
ELSE
|
||||||
|
KX = 1 - (N-1)*INCX
|
||||||
|
END IF
|
||||||
|
IF (INCY.GT.0) THEN
|
||||||
|
KY = 1
|
||||||
|
ELSE
|
||||||
|
KY = 1 - (N-1)*INCY
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Start the operations. In this version the elements of A are
|
||||||
|
* accessed sequentially with one pass through the triangular part
|
||||||
|
* of A.
|
||||||
|
*
|
||||||
|
* First form y := beta*y.
|
||||||
|
*
|
||||||
|
IF (BETA.NE.ONE) THEN
|
||||||
|
IF (INCY.EQ.1) THEN
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 10 I = 1,N
|
||||||
|
Y(I) = ZERO
|
||||||
|
10 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 20 I = 1,N
|
||||||
|
Y(I) = BETA*Y(I)
|
||||||
|
20 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
IY = KY
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 30 I = 1,N
|
||||||
|
Y(IY) = ZERO
|
||||||
|
IY = IY + INCY
|
||||||
|
30 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 40 I = 1,N
|
||||||
|
Y(IY) = BETA*Y(IY)
|
||||||
|
IY = IY + INCY
|
||||||
|
40 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
IF (ALPHA.EQ.ZERO) RETURN
|
||||||
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
|
*
|
||||||
|
* Form y when A is stored in upper triangle.
|
||||||
|
*
|
||||||
|
IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
|
||||||
|
DO 60 J = 1,N
|
||||||
|
TEMP1 = ALPHA*X(J)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 50 I = 1,J - 1
|
||||||
|
Y(I) = Y(I) + TEMP1*A(I,J)
|
||||||
|
TEMP2 = TEMP2 - A(I,J)*X(I)
|
||||||
|
50 CONTINUE
|
||||||
|
Y(J) = Y(J) + ALPHA*TEMP2
|
||||||
|
60 CONTINUE
|
||||||
|
ELSE
|
||||||
|
JX = KX
|
||||||
|
JY = KY
|
||||||
|
DO 80 J = 1,N
|
||||||
|
TEMP1 = ALPHA*X(JX)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
IX = KX
|
||||||
|
IY = KY
|
||||||
|
DO 70 I = 1,J - 1
|
||||||
|
Y(IY) = Y(IY) + TEMP1*A(I,J)
|
||||||
|
TEMP2 = TEMP2 - A(I,J)*X(IX)
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
70 CONTINUE
|
||||||
|
Y(JY) = Y(JY) + ALPHA*TEMP2
|
||||||
|
JX = JX + INCX
|
||||||
|
JY = JY + INCY
|
||||||
|
80 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Form y when A is stored in lower triangle.
|
||||||
|
*
|
||||||
|
IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
|
||||||
|
DO 100 J = 1,N
|
||||||
|
TEMP1 = ALPHA*X(J)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 90 I = J + 1,N
|
||||||
|
Y(I) = Y(I) + TEMP1*A(I,J)
|
||||||
|
TEMP2 = TEMP2 - A(I,J)*X(I)
|
||||||
|
90 CONTINUE
|
||||||
|
Y(J) = Y(J) + ALPHA*TEMP2
|
||||||
|
100 CONTINUE
|
||||||
|
ELSE
|
||||||
|
JX = KX
|
||||||
|
JY = KY
|
||||||
|
DO 120 J = 1,N
|
||||||
|
TEMP1 = ALPHA*X(JX)
|
||||||
|
TEMP2 = ZERO
|
||||||
|
IX = JX
|
||||||
|
IY = JY
|
||||||
|
DO 110 I = J + 1,N
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
Y(IY) = Y(IY) + TEMP1*A(I,J)
|
||||||
|
TEMP2 = TEMP2 - A(I,J)*X(IX)
|
||||||
|
110 CONTINUE
|
||||||
|
Y(JY) = Y(JY) + ALPHA*TEMP2
|
||||||
|
JX = JX + INCX
|
||||||
|
JY = JY + INCY
|
||||||
|
120 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DSKEWSYMV
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -0,0 +1,294 @@
|
|||||||
|
*> \brief \b DSKEWSYR2
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DSKEWSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* DOUBLE PRECISION ALPHA
|
||||||
|
* INTEGER INCX,INCY,LDA,N
|
||||||
|
* CHARACTER UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DSKEWSYR2 performs the skew-symmetric rank 2 operation
|
||||||
|
*>
|
||||||
|
*> A := -alpha*x*y**T + alpha*y*x**T + A,
|
||||||
|
*>
|
||||||
|
*> where alpha is a scalar, x and y are n element vectors and A is an n
|
||||||
|
*> by n skew-symmetric matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> On entry, UPLO specifies whether the upper or lower
|
||||||
|
*> triangular part of the array A is to be referenced as
|
||||||
|
*> follows:
|
||||||
|
*>
|
||||||
|
*> UPLO = 'U' or 'u' Only the upper triangular part of A
|
||||||
|
*> is to be referenced.
|
||||||
|
*>
|
||||||
|
*> UPLO = 'L' or 'l' Only the lower triangular part of A
|
||||||
|
*> is to be referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, N specifies the order of the matrix A.
|
||||||
|
*> N must be at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION
|
||||||
|
*> On entry, ALPHA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] X
|
||||||
|
*> \verbatim
|
||||||
|
*> X is DOUBLE PRECISION array, dimension at least
|
||||||
|
*> ( 1 + ( n - 1 )*abs( INCX ) ).
|
||||||
|
*> Before entry, the incremented array X must contain the n
|
||||||
|
*> element vector x.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> On entry, INCX specifies the increment for the elements of
|
||||||
|
*> X. INCX must not be zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] Y
|
||||||
|
*> \verbatim
|
||||||
|
*> Y is DOUBLE PRECISION array, dimension at least
|
||||||
|
*> ( 1 + ( n - 1 )*abs( INCY ) ).
|
||||||
|
*> Before entry, the incremented array Y must contain the n
|
||||||
|
*> element vector y.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> On entry, INCY specifies the increment for the elements of
|
||||||
|
*> Y. INCY must not be zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension ( LDA, N )
|
||||||
|
*> Before entry with UPLO = 'U' or 'u', the strictly n by n
|
||||||
|
*> upper triangular part of the array A must contain the upper
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> lower triangular part of A is not referenced. On exit, the
|
||||||
|
*> upper triangular part of the array A is overwritten by the
|
||||||
|
*> upper triangular part of the updated matrix.
|
||||||
|
*> Before entry with UPLO = 'L' or 'l', the strictly n by n
|
||||||
|
*> lower triangular part of the array A must contain the lower
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> upper triangular part of A is not referenced. On exit, the
|
||||||
|
*> lower triangular part of the array A is overwritten by the
|
||||||
|
*> lower triangular part of the updated matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> On entry, LDA specifies the first dimension of A as declared
|
||||||
|
*> in the calling (sub) program. LDA must be at least
|
||||||
|
*> max( 1, n ).
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \ingroup skewher2
|
||||||
|
*
|
||||||
|
*> \par Further Details:
|
||||||
|
* =====================
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> Level 2 Blas routine.
|
||||||
|
*> Derived from subroutine dsyr2.
|
||||||
|
*>
|
||||||
|
*> -- Written on 6-Jul-2025.
|
||||||
|
*> Shuo Zheng, China.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DSKEWSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level2 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION ALPHA
|
||||||
|
INTEGER INCX,INCY,LDA,N
|
||||||
|
CHARACTER UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO
|
||||||
|
PARAMETER (ZERO=0.0D+0)
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION TEMP1,TEMP2
|
||||||
|
INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL LSAME
|
||||||
|
EXTERNAL LSAME
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN
|
||||||
|
INFO = 1
|
||||||
|
ELSE IF (N.LT.0) THEN
|
||||||
|
INFO = 2
|
||||||
|
ELSE IF (INCX.EQ.0) THEN
|
||||||
|
INFO = 5
|
||||||
|
ELSE IF (INCY.EQ.0) THEN
|
||||||
|
INFO = 7
|
||||||
|
ELSE IF (LDA.LT.MAX(1,N)) THEN
|
||||||
|
INFO = 9
|
||||||
|
END IF
|
||||||
|
IF (INFO.NE.0) THEN
|
||||||
|
CALL XERBLA('DSKEWSYR2 ',INFO)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF ((N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN
|
||||||
|
*
|
||||||
|
* Set up the start points in X and Y if the increments are not both
|
||||||
|
* unity.
|
||||||
|
*
|
||||||
|
IF ((INCX.NE.1) .OR. (INCY.NE.1)) THEN
|
||||||
|
IF (INCX.GT.0) THEN
|
||||||
|
KX = 1
|
||||||
|
ELSE
|
||||||
|
KX = 1 - (N-1)*INCX
|
||||||
|
END IF
|
||||||
|
IF (INCY.GT.0) THEN
|
||||||
|
KY = 1
|
||||||
|
ELSE
|
||||||
|
KY = 1 - (N-1)*INCY
|
||||||
|
END IF
|
||||||
|
JX = KX
|
||||||
|
JY = KY
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Start the operations. In this version the elements of A are
|
||||||
|
* accessed sequentially with one pass through the triangular part
|
||||||
|
* of A.
|
||||||
|
*
|
||||||
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
|
*
|
||||||
|
* Form A when A is stored in the upper triangle.
|
||||||
|
*
|
||||||
|
IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
|
||||||
|
DO 20 J = 1,N
|
||||||
|
IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*Y(J)
|
||||||
|
TEMP2 = ALPHA*X(J)
|
||||||
|
DO 10 I = 1,J-1
|
||||||
|
A(I,J) = A(I,J) - X(I)*TEMP1 + Y(I)*TEMP2
|
||||||
|
10 CONTINUE
|
||||||
|
END IF
|
||||||
|
20 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 40 J = 1,N
|
||||||
|
IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*Y(JY)
|
||||||
|
TEMP2 = ALPHA*X(JX)
|
||||||
|
IX = KX
|
||||||
|
IY = KY
|
||||||
|
DO 30 I = 1,J-1
|
||||||
|
A(I,J) = A(I,J) - X(IX)*TEMP1 + Y(IY)*TEMP2
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
30 CONTINUE
|
||||||
|
END IF
|
||||||
|
JX = JX + INCX
|
||||||
|
JY = JY + INCY
|
||||||
|
40 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Form A when A is stored in the lower triangle.
|
||||||
|
*
|
||||||
|
IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
|
||||||
|
DO 60 J = 1,N
|
||||||
|
IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*Y(J)
|
||||||
|
TEMP2 = ALPHA*X(J)
|
||||||
|
DO 50 I = J+1,N
|
||||||
|
A(I,J) = A(I,J) - X(I)*TEMP1 + Y(I)*TEMP2
|
||||||
|
50 CONTINUE
|
||||||
|
END IF
|
||||||
|
60 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 80 J = 1,N
|
||||||
|
IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*Y(JY)
|
||||||
|
TEMP2 = ALPHA*X(JX)
|
||||||
|
IX = JX + INCX
|
||||||
|
IY = JY + INCY
|
||||||
|
DO 70 I = J+1,N
|
||||||
|
A(I,J) = A(I,J) - X(IX)*TEMP1 + Y(IY)*TEMP2
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
70 CONTINUE
|
||||||
|
END IF
|
||||||
|
JX = JX + INCX
|
||||||
|
JY = JY + INCY
|
||||||
|
80 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DSKEWSYR2
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -0,0 +1,395 @@
|
|||||||
|
*> \brief \b DSKEWSYR2K
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DSKEWSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* DOUBLE PRECISION ALPHA,BETA
|
||||||
|
* INTEGER K,LDA,LDB,LDC,N
|
||||||
|
* CHARACTER TRANS,UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DSKEWSYR2K performs one of the skew-symmetric rank 2k operations
|
||||||
|
*>
|
||||||
|
*> C := -alpha*A*B**T + alpha*B*A**T + beta*C,
|
||||||
|
*>
|
||||||
|
*> or
|
||||||
|
*>
|
||||||
|
*> C := -alpha*A**T*B + alpha*B**T*A + beta*C,
|
||||||
|
*>
|
||||||
|
*> where alpha and beta are scalars, C is an n by n skew-symmetric matrix
|
||||||
|
*> and A and B are n by k matrices in the first case and k by n
|
||||||
|
*> matrices in the second case.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> On entry, UPLO specifies whether the upper or lower
|
||||||
|
*> triangular part of the array C is to be referenced as
|
||||||
|
*> follows:
|
||||||
|
*>
|
||||||
|
*> UPLO = 'U' or 'u' Only the upper triangular part of C
|
||||||
|
*> is to be referenced.
|
||||||
|
*>
|
||||||
|
*> UPLO = 'L' or 'l' Only the lower triangular part of C
|
||||||
|
*> is to be referenced.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] TRANS
|
||||||
|
*> \verbatim
|
||||||
|
*> TRANS is CHARACTER*1
|
||||||
|
*> On entry, TRANS specifies the operation to be performed as
|
||||||
|
*> follows:
|
||||||
|
*>
|
||||||
|
*> TRANS = 'N' or 'n' C := -alpha*A*B**T + alpha*B*A**T +
|
||||||
|
*> beta*C.
|
||||||
|
*>
|
||||||
|
*> TRANS = 'T' or 't' C := -alpha*A**T*B + alpha*B**T*A +
|
||||||
|
*> beta*C.
|
||||||
|
*>
|
||||||
|
*> TRANS = 'C' or 'c' C := -alpha*A**T*B + alpha*B**T*A +
|
||||||
|
*> beta*C.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, N specifies the order of the matrix C. N must be
|
||||||
|
*> at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER
|
||||||
|
*> On entry with TRANS = 'N' or 'n', K specifies the number
|
||||||
|
*> of columns of the matrices A and B, and on entry with
|
||||||
|
*> TRANS = 'T' or 't' or 'C' or 'c', K specifies the number
|
||||||
|
*> of rows of the matrices A and B. K must be at least zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION.
|
||||||
|
*> On entry, ALPHA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is
|
||||||
|
*> k when TRANS = 'N' or 'n', and is n otherwise.
|
||||||
|
*> Before entry with TRANS = 'N' or 'n', the leading n by k
|
||||||
|
*> part of the array A must contain the matrix A, otherwise
|
||||||
|
*> the leading k by n part of the array A must contain the
|
||||||
|
*> matrix A.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> On entry, LDA specifies the first dimension of A as declared
|
||||||
|
*> in the calling (sub) program. When TRANS = 'N' or 'n'
|
||||||
|
*> then LDA must be at least max( 1, n ), otherwise LDA must
|
||||||
|
*> be at least max( 1, k ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension ( LDB, kb ), where kb is
|
||||||
|
*> k when TRANS = 'N' or 'n', and is n otherwise.
|
||||||
|
*> Before entry with TRANS = 'N' or 'n', the leading n by k
|
||||||
|
*> part of the array B must contain the matrix B, otherwise
|
||||||
|
*> the leading k by n part of the array B must contain the
|
||||||
|
*> matrix B.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> On entry, LDB specifies the first dimension of B as declared
|
||||||
|
*> in the calling (sub) program. When TRANS = 'N' or 'n'
|
||||||
|
*> then LDB must be at least max( 1, n ), otherwise LDB must
|
||||||
|
*> be at least max( 1, k ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] BETA
|
||||||
|
*> \verbatim
|
||||||
|
*> BETA is DOUBLE PRECISION.
|
||||||
|
*> On entry, BETA specifies the scalar beta.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION array, dimension ( LDC, N )
|
||||||
|
*> Before entry with UPLO = 'U' or 'u', the strictly n by n
|
||||||
|
*> upper triangular part of the array C must contain the upper
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> lower triangular part of C is not referenced. On exit, the
|
||||||
|
*> upper triangular part of the array C is overwritten by the
|
||||||
|
*> upper triangular part of the updated matrix.
|
||||||
|
*> Before entry with UPLO = 'L' or 'l', the strictly n by n
|
||||||
|
*> lower triangular part of the array C must contain the lower
|
||||||
|
*> triangular part of the skew-symmetric matrix and the leading
|
||||||
|
*> upper triangular part of C is not referenced. On exit, the
|
||||||
|
*> lower triangular part of the array C is overwritten by the
|
||||||
|
*> lower triangular part of the updated matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDC
|
||||||
|
*> \verbatim
|
||||||
|
*> LDC is INTEGER
|
||||||
|
*> On entry, LDC specifies the first dimension of C as declared
|
||||||
|
*> in the calling (sub) program. LDC must be at least
|
||||||
|
*> max( 1, n ).
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \ingroup skewher2k
|
||||||
|
*
|
||||||
|
*> \par Further Details:
|
||||||
|
* =====================
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> Level 3 Blas routine.
|
||||||
|
*> Derived from subroutine dsyr2k.
|
||||||
|
*>
|
||||||
|
*> -- Written on 6-Jul-2025.
|
||||||
|
*> Shuo Zheng, China.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DSKEWSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,
|
||||||
|
+ LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level3 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION ALPHA,BETA
|
||||||
|
INTEGER K,LDA,LDB,LDC,N
|
||||||
|
CHARACTER TRANS,UPLO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL LSAME
|
||||||
|
EXTERNAL LSAME
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION TEMP1,TEMP2
|
||||||
|
INTEGER I,INFO,J,L,NROWA
|
||||||
|
LOGICAL UPPER
|
||||||
|
* ..
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE,ZERO
|
||||||
|
PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
IF (LSAME(TRANS,'N')) THEN
|
||||||
|
NROWA = N
|
||||||
|
ELSE
|
||||||
|
NROWA = K
|
||||||
|
END IF
|
||||||
|
UPPER = LSAME(UPLO,'U')
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN
|
||||||
|
INFO = 1
|
||||||
|
ELSE IF ((.NOT.LSAME(TRANS,'N')) .AND.
|
||||||
|
+ (.NOT.LSAME(TRANS,'T')) .AND.
|
||||||
|
+ (.NOT.LSAME(TRANS,'C'))) THEN
|
||||||
|
INFO = 2
|
||||||
|
ELSE IF (N.LT.0) THEN
|
||||||
|
INFO = 3
|
||||||
|
ELSE IF (K.LT.0) THEN
|
||||||
|
INFO = 4
|
||||||
|
ELSE IF (LDA.LT.MAX(1,NROWA)) THEN
|
||||||
|
INFO = 7
|
||||||
|
ELSE IF (LDB.LT.MAX(1,NROWA)) THEN
|
||||||
|
INFO = 9
|
||||||
|
ELSE IF (LDC.LT.MAX(1,N)) THEN
|
||||||
|
INFO = 12
|
||||||
|
END IF
|
||||||
|
IF (INFO.NE.0) THEN
|
||||||
|
CALL XERBLA('DSKEWSYR2K',INFO)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF ((N.EQ.0) .OR. (((ALPHA.EQ.ZERO).OR.
|
||||||
|
+ (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN
|
||||||
|
*
|
||||||
|
* And when alpha.eq.zero.
|
||||||
|
*
|
||||||
|
IF (ALPHA.EQ.ZERO) THEN
|
||||||
|
IF (UPPER) THEN
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 20 J = 1,N
|
||||||
|
DO 10 I = 1,J-1
|
||||||
|
C(I,J) = ZERO
|
||||||
|
10 CONTINUE
|
||||||
|
20 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 40 J = 1,N
|
||||||
|
DO 30 I = 1,J-1
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
30 CONTINUE
|
||||||
|
40 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 60 J = 1,N
|
||||||
|
DO 50 I = J+1,N
|
||||||
|
C(I,J) = ZERO
|
||||||
|
50 CONTINUE
|
||||||
|
60 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 80 J = 1,N
|
||||||
|
DO 70 I = J+1,N
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
70 CONTINUE
|
||||||
|
80 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Start the operations.
|
||||||
|
*
|
||||||
|
IF (LSAME(TRANS,'N')) THEN
|
||||||
|
*
|
||||||
|
* Form C := alpha*A*B**T + alpha*B*A**T + C.
|
||||||
|
*
|
||||||
|
IF (UPPER) THEN
|
||||||
|
DO 130 J = 1,N
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 90 I = 1,J-1
|
||||||
|
C(I,J) = ZERO
|
||||||
|
90 CONTINUE
|
||||||
|
ELSE IF (BETA.NE.ONE) THEN
|
||||||
|
DO 100 I = 1,J-1
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
100 CONTINUE
|
||||||
|
END IF
|
||||||
|
DO 120 L = 1,K
|
||||||
|
IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*B(J,L)
|
||||||
|
TEMP2 = ALPHA*A(J,L)
|
||||||
|
DO 110 I = 1,J-1
|
||||||
|
C(I,J) = C(I,J) - A(I,L)*TEMP1 +
|
||||||
|
+ B(I,L)*TEMP2
|
||||||
|
110 CONTINUE
|
||||||
|
END IF
|
||||||
|
120 CONTINUE
|
||||||
|
130 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 180 J = 1,N
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
DO 140 I = J+1,N
|
||||||
|
C(I,J) = ZERO
|
||||||
|
140 CONTINUE
|
||||||
|
ELSE IF (BETA.NE.ONE) THEN
|
||||||
|
DO 150 I = J+1,N
|
||||||
|
C(I,J) = BETA*C(I,J)
|
||||||
|
150 CONTINUE
|
||||||
|
END IF
|
||||||
|
DO 170 L = 1,K
|
||||||
|
IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN
|
||||||
|
TEMP1 = ALPHA*B(J,L)
|
||||||
|
TEMP2 = ALPHA*A(J,L)
|
||||||
|
DO 160 I = J+1,N
|
||||||
|
C(I,J) = C(I,J) - A(I,L)*TEMP1 +
|
||||||
|
+ B(I,L)*TEMP2
|
||||||
|
160 CONTINUE
|
||||||
|
END IF
|
||||||
|
170 CONTINUE
|
||||||
|
180 CONTINUE
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Form C := alpha*A**T*B + alpha*B**T*A + C.
|
||||||
|
*
|
||||||
|
IF (UPPER) THEN
|
||||||
|
DO 210 J = 1,N
|
||||||
|
DO 200 I = 1,J-1
|
||||||
|
TEMP1 = ZERO
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 190 L = 1,K
|
||||||
|
TEMP1 = TEMP1 + A(L,I)*B(L,J)
|
||||||
|
TEMP2 = TEMP2 + B(L,I)*A(L,J)
|
||||||
|
190 CONTINUE
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
C(I,J) = -ALPHA*TEMP1 + ALPHA*TEMP2
|
||||||
|
ELSE
|
||||||
|
C(I,J) = BETA*C(I,J) - ALPHA*TEMP1 +
|
||||||
|
+ ALPHA*TEMP2
|
||||||
|
END IF
|
||||||
|
200 CONTINUE
|
||||||
|
210 CONTINUE
|
||||||
|
ELSE
|
||||||
|
DO 240 J = 1,N
|
||||||
|
DO 230 I = J+1,N
|
||||||
|
TEMP1 = ZERO
|
||||||
|
TEMP2 = ZERO
|
||||||
|
DO 220 L = 1,K
|
||||||
|
TEMP1 = TEMP1 + A(L,I)*B(L,J)
|
||||||
|
TEMP2 = TEMP2 + B(L,I)*A(L,J)
|
||||||
|
220 CONTINUE
|
||||||
|
IF (BETA.EQ.ZERO) THEN
|
||||||
|
C(I,J) = -ALPHA*TEMP1 + ALPHA*TEMP2
|
||||||
|
ELSE
|
||||||
|
C(I,J) = BETA*C(I,J) - ALPHA*TEMP1 +
|
||||||
|
+ ALPHA*TEMP2
|
||||||
|
END IF
|
||||||
|
230 CONTINUE
|
||||||
|
240 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DSKEWSYR2K
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -144,6 +144,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
|
SUBROUTINE DSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -124,6 +124,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSPR(UPLO,N,ALPHA,X,INCX,AP)
|
SUBROUTINE DSPR(UPLO,N,ALPHA,X,INCX,AP)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -139,6 +139,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
|
SUBROUTINE DSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
|
SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -186,6 +186,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -149,6 +149,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
|
SUBROUTINE DSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -144,6 +144,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -189,6 +189,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -166,6 +166,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
SUBROUTINE DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+29
-40
@@ -183,6 +183,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
SUBROUTINE DTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -197,10 +198,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -270,28 +267,24 @@
|
|||||||
KPLUS1 = K + 1
|
KPLUS1 = K + 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
DO 10 I = MAX(1,J-K),J - 1
|
||||||
DO 10 I = MAX(1,J-K),J - 1
|
X(I) = X(I) + TEMP*A(L+I,J)
|
||||||
X(I) = X(I) + TEMP*A(L+I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(KPLUS1,J)
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
DO 30 I = MAX(1,J-K),J - 1
|
||||||
DO 30 I = MAX(1,J-K),J - 1
|
X(IX) = X(IX) + TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(L+I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(KPLUS1,J)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
IF (J.GT.K) KX = KX + INCX
|
IF (J.GT.K) KX = KX + INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -299,29 +292,25 @@
|
|||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
L = 1 - J
|
||||||
L = 1 - J
|
DO 50 I = MIN(N,J+K),J + 1,-1
|
||||||
DO 50 I = MIN(N,J+K),J + 1,-1
|
X(I) = X(I) + TEMP*A(L+I,J)
|
||||||
X(I) = X(I) + TEMP*A(L+I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(1,J)
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
L = 1 - J
|
||||||
L = 1 - J
|
DO 70 I = MIN(N,J+K),J + 1,-1
|
||||||
DO 70 I = MIN(N,J+K),J + 1,-1
|
X(IX) = X(IX) + TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(L+I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(1,J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
IF ((N-J).GE.K) KX = KX - INCX
|
IF ((N-J).GE.K) KX = KX - INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+29
-40
@@ -186,6 +186,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
SUBROUTINE DTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -200,10 +201,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -273,59 +270,51 @@
|
|||||||
KPLUS1 = K + 1
|
KPLUS1 = K + 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
IF (NOUNIT) X(J) = X(J)/A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(KPLUS1,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = J - 1,MAX(1,J-K),-1
|
||||||
DO 10 I = J - 1,MAX(1,J-K),-1
|
X(I) = X(I) - TEMP*A(L+I,J)
|
||||||
X(I) = X(I) - TEMP*A(L+I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
KX = KX - INCX
|
KX = KX - INCX
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IX = KX
|
||||||
IX = KX
|
L = KPLUS1 - J
|
||||||
L = KPLUS1 - J
|
IF (NOUNIT) X(JX) = X(JX)/A(KPLUS1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(KPLUS1,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
DO 30 I = J - 1,MAX(1,J-K),-1
|
||||||
DO 30 I = J - 1,MAX(1,J-K),-1
|
X(IX) = X(IX) - TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(L+I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
L = 1 - J
|
||||||
L = 1 - J
|
IF (NOUNIT) X(J) = X(J)/A(1,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(1,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = J + 1,MIN(N,J+K)
|
||||||
DO 50 I = J + 1,MIN(N,J+K)
|
X(I) = X(I) - TEMP*A(L+I,J)
|
||||||
X(I) = X(I) - TEMP*A(L+I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
KX = KX + INCX
|
KX = KX + INCX
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IX = KX
|
||||||
IX = KX
|
L = 1 - J
|
||||||
L = 1 - J
|
IF (NOUNIT) X(JX) = X(JX)/A(1,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(1,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
DO 70 I = J + 1,MIN(N,J+K)
|
||||||
DO 70 I = J + 1,MIN(N,J+K)
|
X(IX) = X(IX) - TEMP*A(L+I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(L+I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+29
-40
@@ -139,6 +139,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
SUBROUTINE DTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -153,10 +154,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -219,29 +216,25 @@
|
|||||||
KK = 1
|
KK = 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK
|
||||||
K = KK
|
DO 10 I = 1,J - 1
|
||||||
DO 10 I = 1,J - 1
|
X(I) = X(I) + TEMP*AP(K)
|
||||||
X(I) = X(I) + TEMP*AP(K)
|
K = K + 1
|
||||||
K = K + 1
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*AP(KK+J-1)
|
||||||
IF (NOUNIT) X(J) = X(J)*AP(KK+J-1)
|
|
||||||
END IF
|
|
||||||
KK = KK + J
|
KK = KK + J
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 30 K = KK,KK + J - 2
|
||||||
DO 30 K = KK,KK + J - 2
|
X(IX) = X(IX) + TEMP*AP(K)
|
||||||
X(IX) = X(IX) + TEMP*AP(K)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*AP(KK+J-1)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*AP(KK+J-1)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
KK = KK + J
|
KK = KK + J
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -250,30 +243,26 @@
|
|||||||
KK = (N* (N+1))/2
|
KK = (N* (N+1))/2
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK
|
||||||
K = KK
|
DO 50 I = N,J + 1,-1
|
||||||
DO 50 I = N,J + 1,-1
|
X(I) = X(I) + TEMP*AP(K)
|
||||||
X(I) = X(I) + TEMP*AP(K)
|
K = K - 1
|
||||||
K = K - 1
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*AP(KK-N+J)
|
||||||
IF (NOUNIT) X(J) = X(J)*AP(KK-N+J)
|
|
||||||
END IF
|
|
||||||
KK = KK - (N-J+1)
|
KK = KK - (N-J+1)
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 70 K = KK,KK - (N- (J+1)),-1
|
||||||
DO 70 K = KK,KK - (N- (J+1)),-1
|
X(IX) = X(IX) + TEMP*AP(K)
|
||||||
X(IX) = X(IX) + TEMP*AP(K)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*AP(KK-N+J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*AP(KK-N+J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
KK = KK - (N-J+1)
|
KK = KK - (N-J+1)
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+29
-40
@@ -141,6 +141,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
SUBROUTINE DTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -155,10 +156,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -221,29 +218,25 @@
|
|||||||
KK = (N* (N+1))/2
|
KK = (N* (N+1))/2
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
||||||
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK - 1
|
||||||
K = KK - 1
|
DO 10 I = J - 1,1,-1
|
||||||
DO 10 I = J - 1,1,-1
|
X(I) = X(I) - TEMP*AP(K)
|
||||||
X(I) = X(I) - TEMP*AP(K)
|
K = K - 1
|
||||||
K = K - 1
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
KK = KK - J
|
KK = KK - J
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX + (N-1)*INCX
|
JX = KX + (N-1)*INCX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 30 K = KK - 1,KK - J + 1,-1
|
||||||
DO 30 K = KK - 1,KK - J + 1,-1
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
X(IX) = X(IX) - TEMP*AP(K)
|
||||||
X(IX) = X(IX) - TEMP*AP(K)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
KK = KK - J
|
KK = KK - J
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
@@ -252,29 +245,25 @@
|
|||||||
KK = 1
|
KK = 1
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
||||||
IF (NOUNIT) X(J) = X(J)/AP(KK)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
K = KK + 1
|
||||||
K = KK + 1
|
DO 50 I = J + 1,N
|
||||||
DO 50 I = J + 1,N
|
X(I) = X(I) - TEMP*AP(K)
|
||||||
X(I) = X(I) - TEMP*AP(K)
|
K = K + 1
|
||||||
K = K + 1
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
KK = KK + (N-J+1)
|
KK = KK + (N-J+1)
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/AP(KK)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 70 K = KK + 1,KK + N - J
|
||||||
DO 70 K = KK + 1,KK + N - J
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
X(IX) = X(IX) - TEMP*AP(K)
|
||||||
X(IX) = X(IX) - TEMP*AP(K)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
KK = KK + (N-J+1)
|
KK = KK + (N-J+1)
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
|
|||||||
+29
-40
@@ -174,6 +174,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -272,27 +273,23 @@
|
|||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 50 J = 1,N
|
DO 50 J = 1,N
|
||||||
DO 40 K = 1,M
|
DO 40 K = 1,M
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*B(K,J)
|
||||||
TEMP = ALPHA*B(K,J)
|
DO 30 I = 1,K - 1
|
||||||
DO 30 I = 1,K - 1
|
B(I,J) = B(I,J) + TEMP*A(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*A(I,K)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
||||||
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
B(K,J) = TEMP
|
||||||
B(K,J) = TEMP
|
|
||||||
END IF
|
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
DO 70 K = M,1,-1
|
DO 70 K = M,1,-1
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*B(K,J)
|
||||||
TEMP = ALPHA*B(K,J)
|
B(K,J) = TEMP
|
||||||
B(K,J) = TEMP
|
IF (NOUNIT) B(K,J) = B(K,J)*A(K,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)*A(K,K)
|
DO 60 I = K + 1,M
|
||||||
DO 60 I = K + 1,M
|
B(I,J) = B(I,J) + TEMP*A(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*A(I,K)
|
60 CONTINUE
|
||||||
60 CONTINUE
|
|
||||||
END IF
|
|
||||||
70 CONTINUE
|
70 CONTINUE
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -337,12 +334,10 @@
|
|||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = TEMP*B(I,J)
|
||||||
150 CONTINUE
|
150 CONTINUE
|
||||||
DO 170 K = 1,J - 1
|
DO 170 K = 1,J - 1
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*A(K,J)
|
||||||
TEMP = ALPHA*A(K,J)
|
DO 160 I = 1,M
|
||||||
DO 160 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
160 CONTINUE
|
||||||
160 CONTINUE
|
|
||||||
END IF
|
|
||||||
170 CONTINUE
|
170 CONTINUE
|
||||||
180 CONTINUE
|
180 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
@@ -353,12 +348,10 @@
|
|||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = TEMP*B(I,J)
|
||||||
190 CONTINUE
|
190 CONTINUE
|
||||||
DO 210 K = J + 1,N
|
DO 210 K = J + 1,N
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
TEMP = ALPHA*A(K,J)
|
||||||
TEMP = ALPHA*A(K,J)
|
DO 200 I = 1,M
|
||||||
DO 200 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
200 CONTINUE
|
||||||
200 CONTINUE
|
|
||||||
END IF
|
|
||||||
210 CONTINUE
|
210 CONTINUE
|
||||||
220 CONTINUE
|
220 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -369,12 +362,10 @@
|
|||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 260 K = 1,N
|
DO 260 K = 1,N
|
||||||
DO 240 J = 1,K - 1
|
DO 240 J = 1,K - 1
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
TEMP = ALPHA*A(J,K)
|
||||||
TEMP = ALPHA*A(J,K)
|
DO 230 I = 1,M
|
||||||
DO 230 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
230 CONTINUE
|
||||||
230 CONTINUE
|
|
||||||
END IF
|
|
||||||
240 CONTINUE
|
240 CONTINUE
|
||||||
TEMP = ALPHA
|
TEMP = ALPHA
|
||||||
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
||||||
@@ -387,12 +378,10 @@
|
|||||||
ELSE
|
ELSE
|
||||||
DO 300 K = N,1,-1
|
DO 300 K = N,1,-1
|
||||||
DO 280 J = K + 1,N
|
DO 280 J = K + 1,N
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
TEMP = ALPHA*A(J,K)
|
||||||
TEMP = ALPHA*A(J,K)
|
DO 270 I = 1,M
|
||||||
DO 270 I = 1,M
|
B(I,J) = B(I,J) + TEMP*B(I,K)
|
||||||
B(I,J) = B(I,J) + TEMP*B(I,K)
|
270 CONTINUE
|
||||||
270 CONTINUE
|
|
||||||
END IF
|
|
||||||
280 CONTINUE
|
280 CONTINUE
|
||||||
TEMP = ALPHA
|
TEMP = ALPHA
|
||||||
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
IF (NOUNIT) TEMP = TEMP*A(K,K)
|
||||||
|
|||||||
+25
-36
@@ -144,6 +144,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -158,10 +159,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -228,53 +225,45 @@
|
|||||||
IF (LSAME(UPLO,'U')) THEN
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = 1,N
|
DO 20 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = 1,J - 1
|
||||||
DO 10 I = 1,J - 1
|
X(I) = X(I) + TEMP*A(I,J)
|
||||||
X(I) = X(I) + TEMP*A(I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 40 J = 1,N
|
DO 40 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 30 I = 1,J - 1
|
||||||
DO 30 I = 1,J - 1
|
X(IX) = X(IX) + TEMP*A(I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(I,J)
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
30 CONTINUE
|
||||||
30 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = N,1,-1
|
DO 60 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = N,J + 1,-1
|
||||||
DO 50 I = N,J + 1,-1
|
X(I) = X(I) + TEMP*A(I,J)
|
||||||
X(I) = X(I) + TEMP*A(I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)*A(J,J)
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
KX = KX + (N-1)*INCX
|
KX = KX + (N-1)*INCX
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = N,1,-1
|
DO 80 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = KX
|
||||||
IX = KX
|
DO 70 I = N,J + 1,-1
|
||||||
DO 70 I = N,J + 1,-1
|
X(IX) = X(IX) + TEMP*A(I,J)
|
||||||
X(IX) = X(IX) + TEMP*A(I,J)
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
70 CONTINUE
|
||||||
70 CONTINUE
|
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)*A(J,J)
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+47
-76
@@ -178,6 +178,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
SUBROUTINE DTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine --
|
* -- Reference BLAS level3 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -210,8 +211,8 @@
|
|||||||
LOGICAL LSIDE,NOUNIT,UPPER
|
LOGICAL LSIDE,NOUNIT,UPPER
|
||||||
* ..
|
* ..
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
DOUBLE PRECISION ONE,ZERO
|
DOUBLE PRECISION ZERO
|
||||||
PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
|
PARAMETER (ZERO=0.0D+0)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* Test the input parameters.
|
* Test the input parameters.
|
||||||
@@ -275,34 +276,26 @@
|
|||||||
*
|
*
|
||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 30 I = 1,M
|
||||||
DO 30 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
DO 50 K = M,1,-1
|
||||||
END IF
|
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
||||||
DO 50 K = M,1,-1
|
DO 40 I = 1,K - 1
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
40 CONTINUE
|
||||||
DO 40 I = 1,K - 1
|
|
||||||
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
|
||||||
40 CONTINUE
|
|
||||||
END IF
|
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 100 J = 1,N
|
DO 100 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 70 I = 1,M
|
||||||
DO 70 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
DO 90 K = 1,M
|
||||||
END IF
|
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
||||||
DO 90 K = 1,M
|
DO 80 I = K + 1,M
|
||||||
IF (B(K,J).NE.ZERO) THEN
|
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
||||||
IF (NOUNIT) B(K,J) = B(K,J)/A(K,K)
|
80 CONTINUE
|
||||||
DO 80 I = K + 1,M
|
|
||||||
B(I,J) = B(I,J) - B(K,J)*A(I,K)
|
|
||||||
80 CONTINUE
|
|
||||||
END IF
|
|
||||||
90 CONTINUE
|
90 CONTINUE
|
||||||
100 CONTINUE
|
100 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
@@ -341,43 +334,33 @@
|
|||||||
*
|
*
|
||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 210 J = 1,N
|
DO 210 J = 1,N
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 170 I = 1,M
|
||||||
DO 170 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
170 CONTINUE
|
||||||
170 CONTINUE
|
|
||||||
END IF
|
|
||||||
DO 190 K = 1,J - 1
|
DO 190 K = 1,J - 1
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
DO 180 I = 1,M
|
||||||
DO 180 I = 1,M
|
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
||||||
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
180 CONTINUE
|
||||||
180 CONTINUE
|
|
||||||
END IF
|
|
||||||
190 CONTINUE
|
190 CONTINUE
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(J,J)
|
|
||||||
DO 200 I = 1,M
|
DO 200 I = 1,M
|
||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = B(I,J)/A(J,J)
|
||||||
200 CONTINUE
|
200 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
210 CONTINUE
|
210 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 260 J = N,1,-1
|
DO 260 J = N,1,-1
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 220 I = 1,M
|
||||||
DO 220 I = 1,M
|
B(I,J) = ALPHA*B(I,J)
|
||||||
B(I,J) = ALPHA*B(I,J)
|
220 CONTINUE
|
||||||
220 CONTINUE
|
|
||||||
END IF
|
|
||||||
DO 240 K = J + 1,N
|
DO 240 K = J + 1,N
|
||||||
IF (A(K,J).NE.ZERO) THEN
|
DO 230 I = 1,M
|
||||||
DO 230 I = 1,M
|
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
||||||
B(I,J) = B(I,J) - A(K,J)*B(I,K)
|
230 CONTINUE
|
||||||
230 CONTINUE
|
|
||||||
END IF
|
|
||||||
240 CONTINUE
|
240 CONTINUE
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(J,J)
|
|
||||||
DO 250 I = 1,M
|
DO 250 I = 1,M
|
||||||
B(I,J) = TEMP*B(I,J)
|
B(I,J) = B(I,J)/A(J,J)
|
||||||
250 CONTINUE
|
250 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
260 CONTINUE
|
260 CONTINUE
|
||||||
@@ -389,46 +372,34 @@
|
|||||||
IF (UPPER) THEN
|
IF (UPPER) THEN
|
||||||
DO 310 K = N,1,-1
|
DO 310 K = N,1,-1
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(K,K)
|
|
||||||
DO 270 I = 1,M
|
DO 270 I = 1,M
|
||||||
B(I,K) = TEMP*B(I,K)
|
B(I,K) = B(I,K)/A(K,K)
|
||||||
270 CONTINUE
|
270 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 290 J = 1,K - 1
|
DO 290 J = 1,K - 1
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
DO 280 I = 1,M
|
||||||
TEMP = A(J,K)
|
B(I,J) = B(I,J) - A(J,K)*B(I,K)
|
||||||
DO 280 I = 1,M
|
280 CONTINUE
|
||||||
B(I,J) = B(I,J) - TEMP*B(I,K)
|
|
||||||
280 CONTINUE
|
|
||||||
END IF
|
|
||||||
290 CONTINUE
|
290 CONTINUE
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 300 I = 1,M
|
||||||
DO 300 I = 1,M
|
B(I,K) = ALPHA*B(I,K)
|
||||||
B(I,K) = ALPHA*B(I,K)
|
300 CONTINUE
|
||||||
300 CONTINUE
|
|
||||||
END IF
|
|
||||||
310 CONTINUE
|
310 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 360 K = 1,N
|
DO 360 K = 1,N
|
||||||
IF (NOUNIT) THEN
|
IF (NOUNIT) THEN
|
||||||
TEMP = ONE/A(K,K)
|
|
||||||
DO 320 I = 1,M
|
DO 320 I = 1,M
|
||||||
B(I,K) = TEMP*B(I,K)
|
B(I,K) = B(I,K)/A(K,K)
|
||||||
320 CONTINUE
|
320 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 340 J = K + 1,N
|
DO 340 J = K + 1,N
|
||||||
IF (A(J,K).NE.ZERO) THEN
|
DO 330 I = 1,M
|
||||||
TEMP = A(J,K)
|
B(I,J) = B(I,J) - A(J,K)*B(I,K)
|
||||||
DO 330 I = 1,M
|
330 CONTINUE
|
||||||
B(I,J) = B(I,J) - TEMP*B(I,K)
|
|
||||||
330 CONTINUE
|
|
||||||
END IF
|
|
||||||
340 CONTINUE
|
340 CONTINUE
|
||||||
IF (ALPHA.NE.ONE) THEN
|
DO 350 I = 1,M
|
||||||
DO 350 I = 1,M
|
B(I,K) = ALPHA*B(I,K)
|
||||||
B(I,K) = ALPHA*B(I,K)
|
350 CONTINUE
|
||||||
350 CONTINUE
|
|
||||||
END IF
|
|
||||||
360 CONTINUE
|
360 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
+25
-36
@@ -140,6 +140,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
SUBROUTINE DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine --
|
* -- Reference BLAS level2 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
@@ -154,10 +155,6 @@
|
|||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO
|
|
||||||
PARAMETER (ZERO=0.0D+0)
|
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION TEMP
|
DOUBLE PRECISION TEMP
|
||||||
@@ -224,52 +221,44 @@
|
|||||||
IF (LSAME(UPLO,'U')) THEN
|
IF (LSAME(UPLO,'U')) THEN
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 20 J = N,1,-1
|
DO 20 J = N,1,-1
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 10 I = J - 1,1,-1
|
||||||
DO 10 I = J - 1,1,-1
|
X(I) = X(I) - TEMP*A(I,J)
|
||||||
X(I) = X(I) - TEMP*A(I,J)
|
10 CONTINUE
|
||||||
10 CONTINUE
|
|
||||||
END IF
|
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX + (N-1)*INCX
|
JX = KX + (N-1)*INCX
|
||||||
DO 40 J = N,1,-1
|
DO 40 J = N,1,-1
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 30 I = J - 1,1,-1
|
||||||
DO 30 I = J - 1,1,-1
|
IX = IX - INCX
|
||||||
IX = IX - INCX
|
X(IX) = X(IX) - TEMP*A(I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(I,J)
|
30 CONTINUE
|
||||||
30 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX - INCX
|
JX = JX - INCX
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
IF (INCX.EQ.1) THEN
|
IF (INCX.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(J).NE.ZERO) THEN
|
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
||||||
IF (NOUNIT) X(J) = X(J)/A(J,J)
|
TEMP = X(J)
|
||||||
TEMP = X(J)
|
DO 50 I = J + 1,N
|
||||||
DO 50 I = J + 1,N
|
X(I) = X(I) - TEMP*A(I,J)
|
||||||
X(I) = X(I) - TEMP*A(I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
JX = KX
|
JX = KX
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
||||||
IF (NOUNIT) X(JX) = X(JX)/A(J,J)
|
TEMP = X(JX)
|
||||||
TEMP = X(JX)
|
IX = JX
|
||||||
IX = JX
|
DO 70 I = J + 1,N
|
||||||
DO 70 I = J + 1,N
|
IX = IX + INCX
|
||||||
IX = IX + INCX
|
X(IX) = X(IX) - TEMP*A(I,J)
|
||||||
X(IX) = X(IX) - TEMP*A(I,J)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DZASUM(N,ZX,INCX)
|
DOUBLE PRECISION FUNCTION DZASUM(N,ZX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
+3
-2
@@ -86,11 +86,12 @@
|
|||||||
!> \endverbatim
|
!> \endverbatim
|
||||||
!>
|
!>
|
||||||
! =====================================================================
|
! =====================================================================
|
||||||
function DZNRM2( n, x, incx )
|
function DZNRM2( n, x, incx )
|
||||||
|
implicit none
|
||||||
integer, parameter :: wp = kind(1.d0)
|
integer, parameter :: wp = kind(1.d0)
|
||||||
real(wp) :: DZNRM2
|
real(wp) :: DZNRM2
|
||||||
!
|
!
|
||||||
! -- Reference BLAS level1 routine (version 3.9.1) --
|
! -- Reference BLAS level1 routine --
|
||||||
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
! March 2021
|
! March 2021
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
!> \brief \b ICAMAX
|
||||||
|
!
|
||||||
|
! =========== DOCUMENTATION ===========
|
||||||
|
!
|
||||||
|
! Online html documentation available at
|
||||||
|
! http://www.netlib.org/lapack/explore-html/
|
||||||
|
!
|
||||||
|
! Definition:
|
||||||
|
! ===========
|
||||||
|
!
|
||||||
|
! INTEGER FUNCTION ICAMAX(N,X,INCX)
|
||||||
|
!
|
||||||
|
! .. Scalar Arguments ..
|
||||||
|
! INTEGER INCX,N
|
||||||
|
! ..
|
||||||
|
! .. Array Arguments ..
|
||||||
|
! COMPLEX X(*)
|
||||||
|
! ..
|
||||||
|
!
|
||||||
|
!
|
||||||
|
!> \par Purpose:
|
||||||
|
! =============
|
||||||
|
!>
|
||||||
|
!> \verbatim
|
||||||
|
!>
|
||||||
|
!> ICAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)|
|
||||||
|
!> \endverbatim
|
||||||
|
!
|
||||||
|
! Arguments:
|
||||||
|
! ==========
|
||||||
|
!
|
||||||
|
!> \param[in] N
|
||||||
|
!> \verbatim
|
||||||
|
!> N is INTEGER
|
||||||
|
!> number of elements in input vector(s)
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
!> \param[in] X
|
||||||
|
!> \verbatim
|
||||||
|
!> X is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
!> \param[in] INCX
|
||||||
|
!> \verbatim
|
||||||
|
!> INCX is INTEGER
|
||||||
|
!> storage spacing between elements of X
|
||||||
|
!> \endverbatim
|
||||||
|
!
|
||||||
|
! Authors:
|
||||||
|
! ========
|
||||||
|
!
|
||||||
|
!> James Demmel, University of California Berkeley, USA
|
||||||
|
!> Weslley Pereira, National Renewable Energy Laboratory, USA
|
||||||
|
!
|
||||||
|
!> \ingroup iamax
|
||||||
|
!
|
||||||
|
!> \par Further Details:
|
||||||
|
! =====================
|
||||||
|
!>
|
||||||
|
!> \verbatim
|
||||||
|
!>
|
||||||
|
!> James Demmel et al. Proposed Consistent Exception Handling for the BLAS and
|
||||||
|
!> LAPACK, 2022 (https://arxiv.org/abs/2207.09281).
|
||||||
|
!>
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
! =====================================================================
|
||||||
|
integer function icamax(n, x, incx)
|
||||||
|
implicit none
|
||||||
|
integer, parameter :: wp = kind(1.e0)
|
||||||
|
!
|
||||||
|
! -- Reference BLAS level1 routine --
|
||||||
|
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
!
|
||||||
|
! .. Constants ..
|
||||||
|
real(wp), parameter :: hugeval = huge(0.0_wp)
|
||||||
|
!
|
||||||
|
! .. Scalar Arguments ..
|
||||||
|
integer :: n, incx
|
||||||
|
!
|
||||||
|
! .. Array Arguments ..
|
||||||
|
complex(wp) :: x(*)
|
||||||
|
! ..
|
||||||
|
! .. Local Scalars ..
|
||||||
|
integer :: i, j, ix, jx
|
||||||
|
real(wp) :: val, smax
|
||||||
|
logical :: scaledsmax
|
||||||
|
! ..
|
||||||
|
! .. Intrinsic Functions ..
|
||||||
|
intrinsic :: abs, aimag, huge, real
|
||||||
|
!
|
||||||
|
! Quick return if possible
|
||||||
|
!
|
||||||
|
icamax = 0
|
||||||
|
if (n < 1 .or. incx < 1) return
|
||||||
|
!
|
||||||
|
icamax = 1
|
||||||
|
if (n == 1) return
|
||||||
|
!
|
||||||
|
icamax = 0
|
||||||
|
scaledsmax = .false.
|
||||||
|
smax = -1
|
||||||
|
!
|
||||||
|
! scaledsmax = .true. indicates that x(icamax) is finite but
|
||||||
|
! abs(real(x(icamax))) + abs(aimag(x(icamax))) overflows
|
||||||
|
!
|
||||||
|
if (incx == 1) then
|
||||||
|
! code for increment equal to 1
|
||||||
|
do i = 1, n
|
||||||
|
if (x(i) /= x(i)) then
|
||||||
|
! return when first NaN found
|
||||||
|
icamax = i
|
||||||
|
return
|
||||||
|
elseif (abs(real(x(i))) > hugeval .or. abs(aimag(x(i))) > hugeval) then
|
||||||
|
! keep looking for first NaN
|
||||||
|
do j = i+1, n
|
||||||
|
if (x(j) /= x(j)) then
|
||||||
|
! return when first NaN found
|
||||||
|
icamax = j
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
! record location of first Inf
|
||||||
|
icamax = i
|
||||||
|
return
|
||||||
|
else ! still no Inf found yet
|
||||||
|
if (.not. scaledsmax) then
|
||||||
|
! no abs(real(x(i))) + abs(aimag(x(i))) = Inf yet
|
||||||
|
val = abs(real(x(i))) + abs(aimag(x(i)))
|
||||||
|
if (val > hugeval) then
|
||||||
|
scaledsmax = .true.
|
||||||
|
smax = 0.25*abs(real(x(i))) + 0.25*abs(aimag(x(i)))
|
||||||
|
icamax = i
|
||||||
|
elseif (val > smax) then ! everything finite so far
|
||||||
|
smax = val
|
||||||
|
icamax = i
|
||||||
|
endif
|
||||||
|
else ! scaledsmax
|
||||||
|
val = 0.25*abs(real(x(i))) + 0.25*abs(aimag(x(i)))
|
||||||
|
if (val > smax) then
|
||||||
|
smax = val
|
||||||
|
icamax = i
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
end do
|
||||||
|
else
|
||||||
|
! code for increment not equal to 1
|
||||||
|
ix = 1
|
||||||
|
do i = 1, n
|
||||||
|
if (x(ix) /= x(ix)) then
|
||||||
|
! return when first NaN found
|
||||||
|
icamax = i
|
||||||
|
return
|
||||||
|
elseif (abs(real(x(ix))) > hugeval .or. abs(aimag(x(ix))) > hugeval) then
|
||||||
|
! keep looking for first NaN
|
||||||
|
jx = ix + incx
|
||||||
|
do j = i+1, n
|
||||||
|
if (x(jx) /= x(jx)) then
|
||||||
|
! return when first NaN found
|
||||||
|
icamax = j
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
jx = jx + incx
|
||||||
|
enddo
|
||||||
|
! record location of first Inf
|
||||||
|
icamax = i
|
||||||
|
return
|
||||||
|
else ! still no Inf found yet
|
||||||
|
if (.not. scaledsmax) then
|
||||||
|
! no abs(real(x(ix))) + abs(aimag(x(ix))) = Inf yet
|
||||||
|
val = abs(real(x(ix))) + abs(aimag(x(ix)))
|
||||||
|
if (val > hugeval) then
|
||||||
|
scaledsmax = .true.
|
||||||
|
smax = 0.25*abs(real(x(ix))) + 0.25*abs(aimag(x(ix)))
|
||||||
|
icamax = i
|
||||||
|
elseif (val > smax) then ! everything finite so far
|
||||||
|
smax = val
|
||||||
|
icamax = i
|
||||||
|
endif
|
||||||
|
else ! scaledsmax
|
||||||
|
val = 0.25*abs(real(x(ix))) + 0.25*abs(aimag(x(ix)))
|
||||||
|
if (val > smax) then
|
||||||
|
smax = val
|
||||||
|
icamax = i
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ix = ix + incx
|
||||||
|
end do
|
||||||
|
endif
|
||||||
|
end
|
||||||
@@ -68,6 +68,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
INTEGER FUNCTION IDAMAX(N,DX,INCX)
|
INTEGER FUNCTION IDAMAX(N,DX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
INTEGER FUNCTION ISAMAX(N,SX,INCX)
|
INTEGER FUNCTION ISAMAX(N,SX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
!> \brief \b IZAMAX
|
||||||
|
!
|
||||||
|
! =========== DOCUMENTATION ===========
|
||||||
|
!
|
||||||
|
! Online html documentation available at
|
||||||
|
! http://www.netlib.org/lapack/explore-html/
|
||||||
|
!
|
||||||
|
! Definition:
|
||||||
|
! ===========
|
||||||
|
!
|
||||||
|
! INTEGER FUNCTION IZAMAX(N,X,INCX)
|
||||||
|
!
|
||||||
|
! .. Scalar Arguments ..
|
||||||
|
! INTEGER INCX,N
|
||||||
|
! ..
|
||||||
|
! .. Array Arguments ..
|
||||||
|
! DOUBLE COMPLEX X(*)
|
||||||
|
! ..
|
||||||
|
!
|
||||||
|
!
|
||||||
|
!> \par Purpose:
|
||||||
|
! =============
|
||||||
|
!>
|
||||||
|
!> \verbatim
|
||||||
|
!>
|
||||||
|
!> IZAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)|
|
||||||
|
!> \endverbatim
|
||||||
|
!
|
||||||
|
! Arguments:
|
||||||
|
! ==========
|
||||||
|
!
|
||||||
|
!> \param[in] N
|
||||||
|
!> \verbatim
|
||||||
|
!> N is INTEGER
|
||||||
|
!> number of elements in input vector(s)
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
!> \param[in] X
|
||||||
|
!> \verbatim
|
||||||
|
!> X is DOUBLE COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
!> \param[in] INCX
|
||||||
|
!> \verbatim
|
||||||
|
!> INCX is INTEGER
|
||||||
|
!> storage spacing between elements of X
|
||||||
|
!> \endverbatim
|
||||||
|
!
|
||||||
|
! Authors:
|
||||||
|
! ========
|
||||||
|
!
|
||||||
|
!> James Demmel, University of California Berkeley, USA
|
||||||
|
!> Weslley Pereira, National Renewable Energy Laboratory, USA
|
||||||
|
!
|
||||||
|
!> \ingroup iamax
|
||||||
|
!
|
||||||
|
!> \par Further Details:
|
||||||
|
! =====================
|
||||||
|
!>
|
||||||
|
!> \verbatim
|
||||||
|
!>
|
||||||
|
!> James Demmel et al. Proposed Consistent Exception Handling for the BLAS and
|
||||||
|
!> LAPACK, 2022 (https://arxiv.org/abs/2207.09281).
|
||||||
|
!>
|
||||||
|
!> \endverbatim
|
||||||
|
!>
|
||||||
|
! =====================================================================
|
||||||
|
integer function izamax(n, x, incx)
|
||||||
|
implicit none
|
||||||
|
integer, parameter :: wp = kind(1.d0)
|
||||||
|
!
|
||||||
|
! -- Reference BLAS level1 routine --
|
||||||
|
! -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
!
|
||||||
|
! .. Constants ..
|
||||||
|
real(wp), parameter :: hugeval = huge(0.0_wp)
|
||||||
|
!
|
||||||
|
! .. Scalar Arguments ..
|
||||||
|
integer :: n, incx
|
||||||
|
!
|
||||||
|
! .. Array Arguments ..
|
||||||
|
complex(wp) :: x(*)
|
||||||
|
! ..
|
||||||
|
! .. Local Scalars ..
|
||||||
|
integer :: i, j, ix, jx
|
||||||
|
real(wp) :: val, smax
|
||||||
|
logical :: scaledsmax
|
||||||
|
! ..
|
||||||
|
! .. Intrinsic Functions ..
|
||||||
|
intrinsic :: abs, dimag, huge, real
|
||||||
|
!
|
||||||
|
! Quick return if possible
|
||||||
|
!
|
||||||
|
izamax = 0
|
||||||
|
if (n < 1 .or. incx < 1) return
|
||||||
|
!
|
||||||
|
izamax = 1
|
||||||
|
if (n == 1) return
|
||||||
|
!
|
||||||
|
izamax = 0
|
||||||
|
scaledsmax = .false.
|
||||||
|
smax = -1
|
||||||
|
!
|
||||||
|
! scaledsmax = .true. indicates that x(izamax) is finite but
|
||||||
|
! abs(real(x(izamax))) + abs(dimag(x(izamax))) overflows
|
||||||
|
!
|
||||||
|
if (incx == 1) then
|
||||||
|
! code for increment equal to 1
|
||||||
|
do i = 1, n
|
||||||
|
if (x(i) /= x(i)) then
|
||||||
|
! return when first NaN found
|
||||||
|
izamax = i
|
||||||
|
return
|
||||||
|
elseif (abs(real(x(i))) > hugeval .or. abs(dimag(x(i))) > hugeval) then
|
||||||
|
! keep looking for first NaN
|
||||||
|
do j = i+1, n
|
||||||
|
if (x(j) /= x(j)) then
|
||||||
|
! return when first NaN found
|
||||||
|
izamax = j
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
! record location of first Inf
|
||||||
|
izamax = i
|
||||||
|
return
|
||||||
|
else ! still no Inf found yet
|
||||||
|
if (.not. scaledsmax) then
|
||||||
|
! no abs(real(x(i))) + abs(dimag(x(i))) = Inf yet
|
||||||
|
val = abs(real(x(i))) + abs(dimag(x(i)))
|
||||||
|
if (val > hugeval) then
|
||||||
|
scaledsmax = .true.
|
||||||
|
smax = 0.25*abs(real(x(i))) + 0.25*abs(dimag(x(i)))
|
||||||
|
izamax = i
|
||||||
|
elseif (val > smax) then ! everything finite so far
|
||||||
|
smax = val
|
||||||
|
izamax = i
|
||||||
|
endif
|
||||||
|
else ! scaledsmax
|
||||||
|
val = 0.25*abs(real(x(i))) + 0.25*abs(dimag(x(i)))
|
||||||
|
if (val > smax) then
|
||||||
|
smax = val
|
||||||
|
izamax = i
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
end do
|
||||||
|
else
|
||||||
|
! code for increment not equal to 1
|
||||||
|
ix = 1
|
||||||
|
do i = 1, n
|
||||||
|
if (x(ix) /= x(ix)) then
|
||||||
|
! return when first NaN found
|
||||||
|
izamax = i
|
||||||
|
return
|
||||||
|
elseif (abs(real(x(ix))) > hugeval .or. abs(dimag(x(ix))) > hugeval) then
|
||||||
|
! keep looking for first NaN
|
||||||
|
jx = ix + incx
|
||||||
|
do j = i+1, n
|
||||||
|
if (x(jx) /= x(jx)) then
|
||||||
|
! return when first NaN found
|
||||||
|
izamax = j
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
jx = jx + incx
|
||||||
|
enddo
|
||||||
|
! record location of first Inf
|
||||||
|
izamax = i
|
||||||
|
return
|
||||||
|
else ! still no Inf found yet
|
||||||
|
if (.not. scaledsmax) then
|
||||||
|
! no abs(real(x(ix))) + abs(dimag(x(ix))) = Inf yet
|
||||||
|
val = abs(real(x(ix))) + abs(dimag(x(ix)))
|
||||||
|
if (val > hugeval) then
|
||||||
|
scaledsmax = .true.
|
||||||
|
smax = 0.25*abs(real(x(ix))) + 0.25*abs(dimag(x(ix)))
|
||||||
|
izamax = i
|
||||||
|
elseif (val > smax) then ! everything finite so far
|
||||||
|
smax = val
|
||||||
|
izamax = i
|
||||||
|
endif
|
||||||
|
else ! scaledsmax
|
||||||
|
val = 0.25*abs(real(x(ix))) + 0.25*abs(dimag(x(ix)))
|
||||||
|
if (val > smax) then
|
||||||
|
smax = val
|
||||||
|
izamax = i
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ix = ix + incx
|
||||||
|
end do
|
||||||
|
endif
|
||||||
|
end
|
||||||
@@ -50,6 +50,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
LOGICAL FUNCTION LSAME(CA,CB)
|
LOGICAL FUNCTION LSAME(CA,CB)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
REAL FUNCTION SASUM(N,SX,INCX)
|
REAL FUNCTION SASUM(N,SX,INCX)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -0,0 +1,148 @@
|
|||||||
|
*> \brief \b SAXPBY
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* REAL SA,SB
|
||||||
|
* INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* REAL SX(*),SY(*)
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> SAXPBY constant times a vector plus constant times a vector.
|
||||||
|
*>
|
||||||
|
*> Y = ALPHA * X + BETA * Y
|
||||||
|
*>
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SA
|
||||||
|
*> \verbatim
|
||||||
|
*> SA is REAL
|
||||||
|
*> On entry, SA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SX
|
||||||
|
*> \verbatim
|
||||||
|
*> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of SX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SB
|
||||||
|
*> \verbatim
|
||||||
|
*> SB is REAL
|
||||||
|
*> On entry, SB specifies the scalar beta.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] SY
|
||||||
|
*> \verbatim
|
||||||
|
*> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of SY
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*> \author Martin Koehler, MPI Magdeburg
|
||||||
|
*
|
||||||
|
*> \ingroup axpby
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
|
*
|
||||||
|
* -- Reference BLAS level1 routine --
|
||||||
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
REAL SA,SB
|
||||||
|
INTEGER INCX,INCY,N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
REAL SX(*),SY(*)
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL SSCAL
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I,IX,IY,M,MP1
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MOD
|
||||||
|
* ..
|
||||||
|
IF (N.LE.0) RETURN
|
||||||
|
|
||||||
|
* Scale if SA.EQ.0
|
||||||
|
IF (SA.EQ.0.0E0 .AND. SB.NE.0.0E0) THEN
|
||||||
|
CALL SSCAL(N, SB, SY, INCY)
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
|
||||||
|
|
||||||
|
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
|
||||||
|
*
|
||||||
|
* code for both increments equal to 1
|
||||||
|
*
|
||||||
|
DO I = 1,N
|
||||||
|
SY(I) = SB*SY(I) + SA*SX(I)
|
||||||
|
END DO
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* code for unequal increments or equal increments
|
||||||
|
* not equal to 1
|
||||||
|
*
|
||||||
|
IX = 1
|
||||||
|
IY = 1
|
||||||
|
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
|
||||||
|
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
|
||||||
|
DO I = 1,N
|
||||||
|
SY(IY) = SB*SY(IY) + SA*SX(IX)
|
||||||
|
IX = IX + INCX
|
||||||
|
IY = IY + INCY
|
||||||
|
END DO
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of SAXPBY
|
||||||
|
*
|
||||||
|
END
|
||||||
@@ -86,6 +86,7 @@
|
|||||||
*>
|
*>
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE SAXPY(N,SA,SX,INCX,SY,INCY)
|
SUBROUTINE SAXPY(N,SA,SX,INCX,SY,INCY)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
REAL FUNCTION SCABS1(Z)
|
REAL FUNCTION SCABS1(Z)
|
||||||
|
IMPLICIT NONE
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine --
|
* -- Reference BLAS level1 routine --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user