solve_subs.c.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. //---------------------------------------------------------------------
  2. //
  3. // Copyright 2010 Intel Corporation
  4. //
  5. // Licensed under the Apache License, Version 2.0 (the "License");
  6. // you may not use this file except in compliance with the License.
  7. // You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. //
  17. //---------------------------------------------------------------------
  18. #define ablock(m,n) ablock[(m-1)+5*(n-1)]
  19. #define bblock(m,n) bblock[(m-1)+5*(n-1)]
  20. #define cblock(m,n) cblock[(m-1)+5*(n-1)]
  21. #define avec(m) avec[m-1]
  22. #define bvec(m) bvec[m-1]
  23. #define lhs(m,n) lhs[(m-1)+5*(n-1)]
  24. #define c(m,n) c[(m-1)+5*(n-1)]
  25. #define r(m) r[m-1]
  26. void matvec_sub(double ablock[],double avec[],double bvec[]) {
  27. //---------------------------------------------------------------------
  28. //---------------------------------------------------------------------
  29. //---------------------------------------------------------------------
  30. // subtracts bvec=bvec - ablock*avec
  31. //---------------------------------------------------------------------
  32. //---------------------------------------------------------------------
  33. // rhs(i,ic,jc,kc,ccell) = rhs(i,ic,jc,kc,ccell)
  34. // $ - lhs(i,1,ablock,ia,ja,ka,acell)*
  35. //---------------------------------------------------------------------
  36. bvec(1) = bvec(1) - ablock(1,1)*avec(1)
  37. - ablock(1,2)*avec(2)
  38. - ablock(1,3)*avec(3)
  39. - ablock(1,4)*avec(4)
  40. - ablock(1,5)*avec(5);
  41. bvec(2) = bvec(2) - ablock(2,1)*avec(1)
  42. - ablock(2,2)*avec(2)
  43. - ablock(2,3)*avec(3)
  44. - ablock(2,4)*avec(4)
  45. - ablock(2,5)*avec(5);
  46. bvec(3) = bvec(3) - ablock(3,1)*avec(1)
  47. - ablock(3,2)*avec(2)
  48. - ablock(3,3)*avec(3)
  49. - ablock(3,4)*avec(4)
  50. - ablock(3,5)*avec(5);
  51. bvec(4) = bvec(4) - ablock(4,1)*avec(1)
  52. - ablock(4,2)*avec(2)
  53. - ablock(4,3)*avec(3)
  54. - ablock(4,4)*avec(4)
  55. - ablock(4,5)*avec(5);
  56. bvec(5) = bvec(5) - ablock(5,1)*avec(1)
  57. - ablock(5,2)*avec(2)
  58. - ablock(5,3)*avec(3)
  59. - ablock(5,4)*avec(4)
  60. - ablock(5,5)*avec(5);
  61. return;
  62. }
  63. //---------------------------------------------------------------------
  64. //---------------------------------------------------------------------
  65. void matmul_sub(double ablock[], double bblock[], double cblock[]) {
  66. //---------------------------------------------------------------------
  67. //---------------------------------------------------------------------
  68. //---------------------------------------------------------------------
  69. // subtracts a(i,j,k) X b(i,j,k) from c(i,j,k)
  70. //---------------------------------------------------------------------
  71. cblock(1,1) = cblock(1,1) - ablock(1,1)*bblock(1,1)
  72. - ablock(1,2)*bblock(2,1)
  73. - ablock(1,3)*bblock(3,1)
  74. - ablock(1,4)*bblock(4,1)
  75. - ablock(1,5)*bblock(5,1);
  76. cblock(2,1) = cblock(2,1) - ablock(2,1)*bblock(1,1)
  77. - ablock(2,2)*bblock(2,1)
  78. - ablock(2,3)*bblock(3,1)
  79. - ablock(2,4)*bblock(4,1)
  80. - ablock(2,5)*bblock(5,1);
  81. cblock(3,1) = cblock(3,1) - ablock(3,1)*bblock(1,1)
  82. - ablock(3,2)*bblock(2,1)
  83. - ablock(3,3)*bblock(3,1)
  84. - ablock(3,4)*bblock(4,1)
  85. - ablock(3,5)*bblock(5,1);
  86. cblock(4,1) = cblock(4,1) - ablock(4,1)*bblock(1,1)
  87. - ablock(4,2)*bblock(2,1)
  88. - ablock(4,3)*bblock(3,1)
  89. - ablock(4,4)*bblock(4,1)
  90. - ablock(4,5)*bblock(5,1);
  91. cblock(5,1) = cblock(5,1) - ablock(5,1)*bblock(1,1)
  92. - ablock(5,2)*bblock(2,1)
  93. - ablock(5,3)*bblock(3,1)
  94. - ablock(5,4)*bblock(4,1)
  95. - ablock(5,5)*bblock(5,1);
  96. cblock(1,2) = cblock(1,2) - ablock(1,1)*bblock(1,2)
  97. - ablock(1,2)*bblock(2,2)
  98. - ablock(1,3)*bblock(3,2)
  99. - ablock(1,4)*bblock(4,2)
  100. - ablock(1,5)*bblock(5,2);
  101. cblock(2,2) = cblock(2,2) - ablock(2,1)*bblock(1,2)
  102. - ablock(2,2)*bblock(2,2)
  103. - ablock(2,3)*bblock(3,2)
  104. - ablock(2,4)*bblock(4,2)
  105. - ablock(2,5)*bblock(5,2);
  106. cblock(3,2) = cblock(3,2) - ablock(3,1)*bblock(1,2)
  107. - ablock(3,2)*bblock(2,2)
  108. - ablock(3,3)*bblock(3,2)
  109. - ablock(3,4)*bblock(4,2)
  110. - ablock(3,5)*bblock(5,2);
  111. cblock(4,2) = cblock(4,2) - ablock(4,1)*bblock(1,2)
  112. - ablock(4,2)*bblock(2,2)
  113. - ablock(4,3)*bblock(3,2)
  114. - ablock(4,4)*bblock(4,2)
  115. - ablock(4,5)*bblock(5,2);
  116. cblock(5,2) = cblock(5,2) - ablock(5,1)*bblock(1,2)
  117. - ablock(5,2)*bblock(2,2)
  118. - ablock(5,3)*bblock(3,2)
  119. - ablock(5,4)*bblock(4,2)
  120. - ablock(5,5)*bblock(5,2);
  121. cblock(1,3) = cblock(1,3) - ablock(1,1)*bblock(1,3)
  122. - ablock(1,2)*bblock(2,3)
  123. - ablock(1,3)*bblock(3,3)
  124. - ablock(1,4)*bblock(4,3)
  125. - ablock(1,5)*bblock(5,3);
  126. cblock(2,3) = cblock(2,3) - ablock(2,1)*bblock(1,3)
  127. - ablock(2,2)*bblock(2,3)
  128. - ablock(2,3)*bblock(3,3)
  129. - ablock(2,4)*bblock(4,3)
  130. - ablock(2,5)*bblock(5,3);
  131. cblock(3,3) = cblock(3,3) - ablock(3,1)*bblock(1,3)
  132. - ablock(3,2)*bblock(2,3)
  133. - ablock(3,3)*bblock(3,3)
  134. - ablock(3,4)*bblock(4,3)
  135. - ablock(3,5)*bblock(5,3);
  136. cblock(4,3) = cblock(4,3) - ablock(4,1)*bblock(1,3)
  137. - ablock(4,2)*bblock(2,3)
  138. - ablock(4,3)*bblock(3,3)
  139. - ablock(4,4)*bblock(4,3)
  140. - ablock(4,5)*bblock(5,3);
  141. cblock(5,3) = cblock(5,3) - ablock(5,1)*bblock(1,3)
  142. - ablock(5,2)*bblock(2,3)
  143. - ablock(5,3)*bblock(3,3)
  144. - ablock(5,4)*bblock(4,3)
  145. - ablock(5,5)*bblock(5,3);
  146. cblock(1,4) = cblock(1,4) - ablock(1,1)*bblock(1,4)
  147. - ablock(1,2)*bblock(2,4)
  148. - ablock(1,3)*bblock(3,4)
  149. - ablock(1,4)*bblock(4,4)
  150. - ablock(1,5)*bblock(5,4);
  151. cblock(2,4) = cblock(2,4) - ablock(2,1)*bblock(1,4)
  152. - ablock(2,2)*bblock(2,4)
  153. - ablock(2,3)*bblock(3,4)
  154. - ablock(2,4)*bblock(4,4)
  155. - ablock(2,5)*bblock(5,4);
  156. cblock(3,4) = cblock(3,4) - ablock(3,1)*bblock(1,4)
  157. - ablock(3,2)*bblock(2,4)
  158. - ablock(3,3)*bblock(3,4)
  159. - ablock(3,4)*bblock(4,4)
  160. - ablock(3,5)*bblock(5,4);
  161. cblock(4,4) = cblock(4,4) - ablock(4,1)*bblock(1,4)
  162. - ablock(4,2)*bblock(2,4)
  163. - ablock(4,3)*bblock(3,4)
  164. - ablock(4,4)*bblock(4,4)
  165. - ablock(4,5)*bblock(5,4);
  166. cblock(5,4) = cblock(5,4) - ablock(5,1)*bblock(1,4)
  167. - ablock(5,2)*bblock(2,4)
  168. - ablock(5,3)*bblock(3,4)
  169. - ablock(5,4)*bblock(4,4)
  170. - ablock(5,5)*bblock(5,4);
  171. cblock(1,5) = cblock(1,5) - ablock(1,1)*bblock(1,5)
  172. - ablock(1,2)*bblock(2,5)
  173. - ablock(1,3)*bblock(3,5)
  174. - ablock(1,4)*bblock(4,5)
  175. - ablock(1,5)*bblock(5,5);
  176. cblock(2,5) = cblock(2,5) - ablock(2,1)*bblock(1,5)
  177. - ablock(2,2)*bblock(2,5)
  178. - ablock(2,3)*bblock(3,5)
  179. - ablock(2,4)*bblock(4,5)
  180. - ablock(2,5)*bblock(5,5);
  181. cblock(3,5) = cblock(3,5) - ablock(3,1)*bblock(1,5)
  182. - ablock(3,2)*bblock(2,5)
  183. - ablock(3,3)*bblock(3,5)
  184. - ablock(3,4)*bblock(4,5)
  185. - ablock(3,5)*bblock(5,5);
  186. cblock(4,5) = cblock(4,5) - ablock(4,1)*bblock(1,5)
  187. - ablock(4,2)*bblock(2,5)
  188. - ablock(4,3)*bblock(3,5)
  189. - ablock(4,4)*bblock(4,5)
  190. - ablock(4,5)*bblock(5,5);
  191. cblock(5,5) = cblock(5,5) - ablock(5,1)*bblock(1,5)
  192. - ablock(5,2)*bblock(2,5)
  193. - ablock(5,3)*bblock(3,5)
  194. - ablock(5,4)*bblock(4,5)
  195. - ablock(5,5)*bblock(5,5);
  196. return;
  197. }
  198. //---------------------------------------------------------------------
  199. //---------------------------------------------------------------------
  200. void binvcrhs( double lhs[],double c[],double r[] ) {
  201. //---------------------------------------------------------------------
  202. //---------------------------------------------------------------------
  203. //---------------------------------------------------------------------
  204. //
  205. //---------------------------------------------------------------------
  206. double pivot, coeff;
  207. //---------------------------------------------------------------------
  208. //
  209. //---------------------------------------------------------------------
  210. pivot = 1.00e0/lhs(1,1);
  211. lhs(1,2) = lhs(1,2)*pivot;
  212. lhs(1,3) = lhs(1,3)*pivot;
  213. lhs(1,4) = lhs(1,4)*pivot;
  214. lhs(1,5) = lhs(1,5)*pivot;
  215. c(1,1) = c(1,1)*pivot;
  216. c(1,2) = c(1,2)*pivot;
  217. c(1,3) = c(1,3)*pivot;
  218. c(1,4) = c(1,4)*pivot;
  219. c(1,5) = c(1,5)*pivot;
  220. r(1) = r(1) *pivot;
  221. coeff = lhs(2,1);
  222. lhs(2,2)= lhs(2,2) - coeff*lhs(1,2);
  223. lhs(2,3)= lhs(2,3) - coeff*lhs(1,3);
  224. lhs(2,4)= lhs(2,4) - coeff*lhs(1,4);
  225. lhs(2,5)= lhs(2,5) - coeff*lhs(1,5);
  226. c(2,1) = c(2,1) - coeff*c(1,1);
  227. c(2,2) = c(2,2) - coeff*c(1,2);
  228. c(2,3) = c(2,3) - coeff*c(1,3);
  229. c(2,4) = c(2,4) - coeff*c(1,4);
  230. c(2,5) = c(2,5) - coeff*c(1,5);
  231. r(2) = r(2) - coeff*r(1);
  232. coeff = lhs(3,1);
  233. lhs(3,2)= lhs(3,2) - coeff*lhs(1,2);
  234. lhs(3,3)= lhs(3,3) - coeff*lhs(1,3);
  235. lhs(3,4)= lhs(3,4) - coeff*lhs(1,4);
  236. lhs(3,5)= lhs(3,5) - coeff*lhs(1,5);
  237. c(3,1) = c(3,1) - coeff*c(1,1);
  238. c(3,2) = c(3,2) - coeff*c(1,2);
  239. c(3,3) = c(3,3) - coeff*c(1,3);
  240. c(3,4) = c(3,4) - coeff*c(1,4);
  241. c(3,5) = c(3,5) - coeff*c(1,5);
  242. r(3) = r(3) - coeff*r(1);
  243. coeff = lhs(4,1);
  244. lhs(4,2)= lhs(4,2) - coeff*lhs(1,2);
  245. lhs(4,3)= lhs(4,3) - coeff*lhs(1,3);
  246. lhs(4,4)= lhs(4,4) - coeff*lhs(1,4);
  247. lhs(4,5)= lhs(4,5) - coeff*lhs(1,5);
  248. c(4,1) = c(4,1) - coeff*c(1,1);
  249. c(4,2) = c(4,2) - coeff*c(1,2);
  250. c(4,3) = c(4,3) - coeff*c(1,3);
  251. c(4,4) = c(4,4) - coeff*c(1,4);
  252. c(4,5) = c(4,5) - coeff*c(1,5);
  253. r(4) = r(4) - coeff*r(1);
  254. coeff = lhs(5,1);
  255. lhs(5,2)= lhs(5,2) - coeff*lhs(1,2);
  256. lhs(5,3)= lhs(5,3) - coeff*lhs(1,3);
  257. lhs(5,4)= lhs(5,4) - coeff*lhs(1,4);
  258. lhs(5,5)= lhs(5,5) - coeff*lhs(1,5);
  259. c(5,1) = c(5,1) - coeff*c(1,1);
  260. c(5,2) = c(5,2) - coeff*c(1,2);
  261. c(5,3) = c(5,3) - coeff*c(1,3);
  262. c(5,4) = c(5,4) - coeff*c(1,4);
  263. c(5,5) = c(5,5) - coeff*c(1,5);
  264. r(5) = r(5) - coeff*r(1);
  265. pivot = 1.00e0/lhs(2,2);
  266. lhs(2,3) = lhs(2,3)*pivot;
  267. lhs(2,4) = lhs(2,4)*pivot;
  268. lhs(2,5) = lhs(2,5)*pivot;
  269. c(2,1) = c(2,1)*pivot;
  270. c(2,2) = c(2,2)*pivot;
  271. c(2,3) = c(2,3)*pivot;
  272. c(2,4) = c(2,4)*pivot;
  273. c(2,5) = c(2,5)*pivot;
  274. r(2) = r(2) *pivot;
  275. coeff = lhs(1,2);
  276. lhs(1,3)= lhs(1,3) - coeff*lhs(2,3);
  277. lhs(1,4)= lhs(1,4) - coeff*lhs(2,4);
  278. lhs(1,5)= lhs(1,5) - coeff*lhs(2,5);
  279. c(1,1) = c(1,1) - coeff*c(2,1);
  280. c(1,2) = c(1,2) - coeff*c(2,2);
  281. c(1,3) = c(1,3) - coeff*c(2,3);
  282. c(1,4) = c(1,4) - coeff*c(2,4);
  283. c(1,5) = c(1,5) - coeff*c(2,5);
  284. r(1) = r(1) - coeff*r(2);
  285. coeff = lhs(3,2);
  286. lhs(3,3)= lhs(3,3) - coeff*lhs(2,3);
  287. lhs(3,4)= lhs(3,4) - coeff*lhs(2,4);
  288. lhs(3,5)= lhs(3,5) - coeff*lhs(2,5);
  289. c(3,1) = c(3,1) - coeff*c(2,1);
  290. c(3,2) = c(3,2) - coeff*c(2,2);
  291. c(3,3) = c(3,3) - coeff*c(2,3);
  292. c(3,4) = c(3,4) - coeff*c(2,4);
  293. c(3,5) = c(3,5) - coeff*c(2,5);
  294. r(3) = r(3) - coeff*r(2);
  295. coeff = lhs(4,2);
  296. lhs(4,3)= lhs(4,3) - coeff*lhs(2,3);
  297. lhs(4,4)= lhs(4,4) - coeff*lhs(2,4);
  298. lhs(4,5)= lhs(4,5) - coeff*lhs(2,5);
  299. c(4,1) = c(4,1) - coeff*c(2,1);
  300. c(4,2) = c(4,2) - coeff*c(2,2);
  301. c(4,3) = c(4,3) - coeff*c(2,3);
  302. c(4,4) = c(4,4) - coeff*c(2,4);
  303. c(4,5) = c(4,5) - coeff*c(2,5);
  304. r(4) = r(4) - coeff*r(2);
  305. coeff = lhs(5,2);
  306. lhs(5,3)= lhs(5,3) - coeff*lhs(2,3);
  307. lhs(5,4)= lhs(5,4) - coeff*lhs(2,4);
  308. lhs(5,5)= lhs(5,5) - coeff*lhs(2,5);
  309. c(5,1) = c(5,1) - coeff*c(2,1);
  310. c(5,2) = c(5,2) - coeff*c(2,2);
  311. c(5,3) = c(5,3) - coeff*c(2,3);
  312. c(5,4) = c(5,4) - coeff*c(2,4);
  313. c(5,5) = c(5,5) - coeff*c(2,5);
  314. r(5) = r(5) - coeff*r(2);
  315. pivot = 1.00e0/lhs(3,3);
  316. lhs(3,4) = lhs(3,4)*pivot;
  317. lhs(3,5) = lhs(3,5)*pivot;
  318. c(3,1) = c(3,1)*pivot;
  319. c(3,2) = c(3,2)*pivot;
  320. c(3,3) = c(3,3)*pivot;
  321. c(3,4) = c(3,4)*pivot;
  322. c(3,5) = c(3,5)*pivot;
  323. r(3) = r(3) *pivot;
  324. coeff = lhs(1,3);
  325. lhs(1,4)= lhs(1,4) - coeff*lhs(3,4);
  326. lhs(1,5)= lhs(1,5) - coeff*lhs(3,5);
  327. c(1,1) = c(1,1) - coeff*c(3,1);
  328. c(1,2) = c(1,2) - coeff*c(3,2);
  329. c(1,3) = c(1,3) - coeff*c(3,3);
  330. c(1,4) = c(1,4) - coeff*c(3,4);
  331. c(1,5) = c(1,5) - coeff*c(3,5);
  332. r(1) = r(1) - coeff*r(3);
  333. coeff = lhs(2,3);
  334. lhs(2,4)= lhs(2,4) - coeff*lhs(3,4);
  335. lhs(2,5)= lhs(2,5) - coeff*lhs(3,5);
  336. c(2,1) = c(2,1) - coeff*c(3,1);
  337. c(2,2) = c(2,2) - coeff*c(3,2);
  338. c(2,3) = c(2,3) - coeff*c(3,3);
  339. c(2,4) = c(2,4) - coeff*c(3,4);
  340. c(2,5) = c(2,5) - coeff*c(3,5);
  341. r(2) = r(2) - coeff*r(3);
  342. coeff = lhs(4,3);
  343. lhs(4,4)= lhs(4,4) - coeff*lhs(3,4);
  344. lhs(4,5)= lhs(4,5) - coeff*lhs(3,5);
  345. c(4,1) = c(4,1) - coeff*c(3,1);
  346. c(4,2) = c(4,2) - coeff*c(3,2);
  347. c(4,3) = c(4,3) - coeff*c(3,3);
  348. c(4,4) = c(4,4) - coeff*c(3,4);
  349. c(4,5) = c(4,5) - coeff*c(3,5);
  350. r(4) = r(4) - coeff*r(3);
  351. coeff = lhs(5,3);
  352. lhs(5,4)= lhs(5,4) - coeff*lhs(3,4);
  353. lhs(5,5)= lhs(5,5) - coeff*lhs(3,5);
  354. c(5,1) = c(5,1) - coeff*c(3,1);
  355. c(5,2) = c(5,2) - coeff*c(3,2);
  356. c(5,3) = c(5,3) - coeff*c(3,3);
  357. c(5,4) = c(5,4) - coeff*c(3,4);
  358. c(5,5) = c(5,5) - coeff*c(3,5);
  359. r(5) = r(5) - coeff*r(3);
  360. pivot = 1.00e0/lhs(4,4);
  361. lhs(4,5) = lhs(4,5)*pivot;
  362. c(4,1) = c(4,1)*pivot;
  363. c(4,2) = c(4,2)*pivot;
  364. c(4,3) = c(4,3)*pivot;
  365. c(4,4) = c(4,4)*pivot;
  366. c(4,5) = c(4,5)*pivot;
  367. r(4) = r(4) *pivot;
  368. coeff = lhs(1,4);
  369. lhs(1,5)= lhs(1,5) - coeff*lhs(4,5);
  370. c(1,1) = c(1,1) - coeff*c(4,1);
  371. c(1,2) = c(1,2) - coeff*c(4,2);
  372. c(1,3) = c(1,3) - coeff*c(4,3);
  373. c(1,4) = c(1,4) - coeff*c(4,4);
  374. c(1,5) = c(1,5) - coeff*c(4,5);
  375. r(1) = r(1) - coeff*r(4);
  376. coeff = lhs(2,4);
  377. lhs(2,5)= lhs(2,5) - coeff*lhs(4,5);
  378. c(2,1) = c(2,1) - coeff*c(4,1);
  379. c(2,2) = c(2,2) - coeff*c(4,2);
  380. c(2,3) = c(2,3) - coeff*c(4,3);
  381. c(2,4) = c(2,4) - coeff*c(4,4);
  382. c(2,5) = c(2,5) - coeff*c(4,5);
  383. r(2) = r(2) - coeff*r(4);
  384. coeff = lhs(3,4);
  385. lhs(3,5)= lhs(3,5) - coeff*lhs(4,5);
  386. c(3,1) = c(3,1) - coeff*c(4,1);
  387. c(3,2) = c(3,2) - coeff*c(4,2);
  388. c(3,3) = c(3,3) - coeff*c(4,3);
  389. c(3,4) = c(3,4) - coeff*c(4,4);
  390. c(3,5) = c(3,5) - coeff*c(4,5);
  391. r(3) = r(3) - coeff*r(4);
  392. coeff = lhs(5,4);
  393. lhs(5,5)= lhs(5,5) - coeff*lhs(4,5);
  394. c(5,1) = c(5,1) - coeff*c(4,1);
  395. c(5,2) = c(5,2) - coeff*c(4,2);
  396. c(5,3) = c(5,3) - coeff*c(4,3);
  397. c(5,4) = c(5,4) - coeff*c(4,4);
  398. c(5,5) = c(5,5) - coeff*c(4,5);
  399. r(5) = r(5) - coeff*r(4);
  400. pivot = 1.00e0/lhs(5,5);
  401. c(5,1) = c(5,1)*pivot;
  402. c(5,2) = c(5,2)*pivot;
  403. c(5,3) = c(5,3)*pivot;
  404. c(5,4) = c(5,4)*pivot;
  405. c(5,5) = c(5,5)*pivot;
  406. r(5) = r(5) *pivot;
  407. coeff = lhs(1,5);
  408. c(1,1) = c(1,1) - coeff*c(5,1);
  409. c(1,2) = c(1,2) - coeff*c(5,2);
  410. c(1,3) = c(1,3) - coeff*c(5,3);
  411. c(1,4) = c(1,4) - coeff*c(5,4);
  412. c(1,5) = c(1,5) - coeff*c(5,5);
  413. r(1) = r(1) - coeff*r(5);
  414. coeff = lhs(2,5);
  415. c(2,1) = c(2,1) - coeff*c(5,1);
  416. c(2,2) = c(2,2) - coeff*c(5,2);
  417. c(2,3) = c(2,3) - coeff*c(5,3);
  418. c(2,4) = c(2,4) - coeff*c(5,4);
  419. c(2,5) = c(2,5) - coeff*c(5,5);
  420. r(2) = r(2) - coeff*r(5);
  421. coeff = lhs(3,5);
  422. c(3,1) = c(3,1) - coeff*c(5,1);
  423. c(3,2) = c(3,2) - coeff*c(5,2);
  424. c(3,3) = c(3,3) - coeff*c(5,3);
  425. c(3,4) = c(3,4) - coeff*c(5,4);
  426. c(3,5) = c(3,5) - coeff*c(5,5);
  427. r(3) = r(3) - coeff*r(5);
  428. coeff = lhs(4,5);
  429. c(4,1) = c(4,1) - coeff*c(5,1);
  430. c(4,2) = c(4,2) - coeff*c(5,2);
  431. c(4,3) = c(4,3) - coeff*c(5,3);
  432. c(4,4) = c(4,4) - coeff*c(5,4);
  433. c(4,5) = c(4,5) - coeff*c(5,5);
  434. r(4) = r(4) - coeff*r(5);
  435. return;
  436. }
  437. //---------------------------------------------------------------------
  438. //---------------------------------------------------------------------
  439. void binvrhs( double lhs[],double r[] ) {
  440. //---------------------------------------------------------------------
  441. //---------------------------------------------------------------------
  442. //---------------------------------------------------------------------
  443. //
  444. //---------------------------------------------------------------------
  445. double pivot, coeff;
  446. //---------------------------------------------------------------------
  447. //
  448. //---------------------------------------------------------------------
  449. pivot = 1.00e0/lhs(1,1);
  450. lhs(1,2) = lhs(1,2)*pivot;
  451. lhs(1,3) = lhs(1,3)*pivot;
  452. lhs(1,4) = lhs(1,4)*pivot;
  453. lhs(1,5) = lhs(1,5)*pivot;
  454. r(1) = r(1) *pivot;
  455. coeff = lhs(2,1);
  456. lhs(2,2)= lhs(2,2) - coeff*lhs(1,2);
  457. lhs(2,3)= lhs(2,3) - coeff*lhs(1,3);
  458. lhs(2,4)= lhs(2,4) - coeff*lhs(1,4);
  459. lhs(2,5)= lhs(2,5) - coeff*lhs(1,5);
  460. r(2) = r(2) - coeff*r(1);
  461. coeff = lhs(3,1);
  462. lhs(3,2)= lhs(3,2) - coeff*lhs(1,2);
  463. lhs(3,3)= lhs(3,3) - coeff*lhs(1,3);
  464. lhs(3,4)= lhs(3,4) - coeff*lhs(1,4);
  465. lhs(3,5)= lhs(3,5) - coeff*lhs(1,5);
  466. r(3) = r(3) - coeff*r(1);
  467. coeff = lhs(4,1);
  468. lhs(4,2)= lhs(4,2) - coeff*lhs(1,2);
  469. lhs(4,3)= lhs(4,3) - coeff*lhs(1,3);
  470. lhs(4,4)= lhs(4,4) - coeff*lhs(1,4);
  471. lhs(4,5)= lhs(4,5) - coeff*lhs(1,5);
  472. r(4) = r(4) - coeff*r(1);
  473. coeff = lhs(5,1);
  474. lhs(5,2)= lhs(5,2) - coeff*lhs(1,2);
  475. lhs(5,3)= lhs(5,3) - coeff*lhs(1,3);
  476. lhs(5,4)= lhs(5,4) - coeff*lhs(1,4);
  477. lhs(5,5)= lhs(5,5) - coeff*lhs(1,5);
  478. r(5) = r(5) - coeff*r(1);
  479. pivot = 1.00e0/lhs(2,2);
  480. lhs(2,3) = lhs(2,3)*pivot;
  481. lhs(2,4) = lhs(2,4)*pivot;
  482. lhs(2,5) = lhs(2,5)*pivot;
  483. r(2) = r(2) *pivot;
  484. coeff = lhs(1,2);
  485. lhs(1,3)= lhs(1,3) - coeff*lhs(2,3);
  486. lhs(1,4)= lhs(1,4) - coeff*lhs(2,4);
  487. lhs(1,5)= lhs(1,5) - coeff*lhs(2,5);
  488. r(1) = r(1) - coeff*r(2);
  489. coeff = lhs(3,2);
  490. lhs(3,3)= lhs(3,3) - coeff*lhs(2,3);
  491. lhs(3,4)= lhs(3,4) - coeff*lhs(2,4);
  492. lhs(3,5)= lhs(3,5) - coeff*lhs(2,5);
  493. r(3) = r(3) - coeff*r(2);
  494. coeff = lhs(4,2);
  495. lhs(4,3)= lhs(4,3) - coeff*lhs(2,3);
  496. lhs(4,4)= lhs(4,4) - coeff*lhs(2,4);
  497. lhs(4,5)= lhs(4,5) - coeff*lhs(2,5);
  498. r(4) = r(4) - coeff*r(2);
  499. coeff = lhs(5,2);
  500. lhs(5,3)= lhs(5,3) - coeff*lhs(2,3);
  501. lhs(5,4)= lhs(5,4) - coeff*lhs(2,4);
  502. lhs(5,5)= lhs(5,5) - coeff*lhs(2,5);
  503. r(5) = r(5) - coeff*r(2);
  504. pivot = 1.00e0/lhs(3,3);
  505. lhs(3,4) = lhs(3,4)*pivot;
  506. lhs(3,5) = lhs(3,5)*pivot;
  507. r(3) = r(3) *pivot;
  508. coeff = lhs(1,3);
  509. lhs(1,4)= lhs(1,4) - coeff*lhs(3,4);
  510. lhs(1,5)= lhs(1,5) - coeff*lhs(3,5);
  511. r(1) = r(1) - coeff*r(3);
  512. coeff = lhs(2,3);
  513. lhs(2,4)= lhs(2,4) - coeff*lhs(3,4);
  514. lhs(2,5)= lhs(2,5) - coeff*lhs(3,5);
  515. r(2) = r(2) - coeff*r(3);
  516. coeff = lhs(4,3);
  517. lhs(4,4)= lhs(4,4) - coeff*lhs(3,4);
  518. lhs(4,5)= lhs(4,5) - coeff*lhs(3,5);
  519. r(4) = r(4) - coeff*r(3);
  520. coeff = lhs(5,3);
  521. lhs(5,4)= lhs(5,4) - coeff*lhs(3,4);
  522. lhs(5,5)= lhs(5,5) - coeff*lhs(3,5);
  523. r(5) = r(5) - coeff*r(3);
  524. pivot = 1.00e0/lhs(4,4);
  525. lhs(4,5) = lhs(4,5)*pivot;
  526. r(4) = r(4) *pivot;
  527. coeff = lhs(1,4);
  528. lhs(1,5)= lhs(1,5) - coeff*lhs(4,5);
  529. r(1) = r(1) - coeff*r(4);
  530. coeff = lhs(2,4);
  531. lhs(2,5)= lhs(2,5) - coeff*lhs(4,5);
  532. r(2) = r(2) - coeff*r(4);
  533. coeff = lhs(3,4);
  534. lhs(3,5)= lhs(3,5) - coeff*lhs(4,5);
  535. r(3) = r(3) - coeff*r(4);
  536. coeff = lhs(5,4);
  537. lhs(5,5)= lhs(5,5) - coeff*lhs(4,5);
  538. r(5) = r(5) - coeff*r(4);
  539. pivot = 1.00e0/lhs(5,5);
  540. r(5) = r(5) *pivot;
  541. coeff = lhs(1,5);
  542. r(1) = r(1) - coeff*r(5);
  543. coeff = lhs(2,5);
  544. r(2) = r(2) - coeff*r(5);
  545. coeff = lhs(3,5);
  546. r(3) = r(3) - coeff*r(5);
  547. coeff = lhs(4,5);
  548. r(4) = r(4) - coeff*r(5);
  549. return;
  550. }