jacu.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. //
  2. // Copyright 2010 Intel Corporation
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. #include "applu_share.h"
  17. #include "applu_macros.h"
  18. void jacu(int k) {
  19. // compute the upper triangular part of the jacobian matrix
  20. // local variables
  21. int i, j;
  22. double r43;
  23. double c1345;
  24. double c34;
  25. double tmp1, tmp2, tmp3;
  26. r43 = ( 4.0 / 3.0 );
  27. c1345 = c1 * c3 * c4 * c5;
  28. c34 = c3 * c4;
  29. for (j = jst; j<= jend; j++)
  30. for (i = ist; i<=iend; i++) {
  31. //c---------------------------------------------------------------------
  32. //c form the block diagonal
  33. //c---------------------------------------------------------------------
  34. tmp1 = 1.0 / u(1,i,j,k);
  35. tmp2 = tmp1 * tmp1;
  36. tmp3 = tmp1 * tmp2;
  37. tmp1 = 1.0 / u(1,i,j,k);
  38. tmp2 = tmp1 * tmp1;
  39. tmp3 = tmp1 * tmp2;
  40. d(1,1,i,j) = 1.0
  41. + dt * 2.0 * ( tx1 * dx1
  42. + ty1 * dy1
  43. + tz1 * dz1 );
  44. d(1,2,i,j) = 0.0;
  45. d(1,3,i,j) = 0.0;
  46. d(1,4,i,j) = 0.0;
  47. d(1,5,i,j) = 0.0;
  48. d(2,1,i,j) = dt * 2.0
  49. * ( tx1 * ( - r43 * c34 * tmp2 * u(2,i,j,k) )
  50. + ty1 * ( - c34 * tmp2 * u(2,i,j,k) )
  51. + tz1 * ( - c34 * tmp2 * u(2,i,j,k) ) );
  52. d(2,2,i,j) = 1.0
  53. + dt * 2.0
  54. * ( tx1 * r43 * c34 * tmp1
  55. + ty1 * c34 * tmp1
  56. + tz1 * c34 * tmp1 )
  57. + dt * 2.0 * ( tx1 * dx2
  58. + ty1 * dy2
  59. + tz1 * dz2 );
  60. d(2,3,i,j) = 0.0;
  61. d(2,4,i,j) = 0.0;
  62. d(2,5,i,j) = 0.0;
  63. d(3,1,i,j) = dt * 2.0
  64. * ( tx1 * ( - c34 * tmp2 * u(3,i,j,k) )
  65. + ty1 * ( - r43 * c34 * tmp2 * u(3,i,j,k) )
  66. + tz1 * ( - c34 * tmp2 * u(3,i,j,k) ) );
  67. d(3,2,i,j) = 0.0;
  68. d(3,3,i,j) = 1.0
  69. + dt * 2.0
  70. * ( tx1 * c34 * tmp1
  71. + ty1 * r43 * c34 * tmp1
  72. + tz1 * c34 * tmp1 )
  73. + dt * 2.0 * ( tx1 * dx3
  74. + ty1 * dy3
  75. + tz1 * dz3 );
  76. d(3,4,i,j) = 0.0;
  77. d(3,5,i,j) = 0.0;
  78. d(4,1,i,j) = dt * 2.0
  79. * ( tx1 * ( - c34 * tmp2 * u(4,i,j,k) )
  80. + ty1 * ( - c34 * tmp2 * u(4,i,j,k) )
  81. + tz1 * ( - r43 * c34 * tmp2 * u(4,i,j,k) ) );
  82. d(4,2,i,j) = 0.0;
  83. d(4,3,i,j) = 0.0;
  84. d(4,4,i,j) = 1.0
  85. + dt * 2.0
  86. * ( tx1 * c34 * tmp1
  87. + ty1 * c34 * tmp1
  88. + tz1 * r43 * c34 * tmp1 )
  89. + dt * 2.0 * ( tx1 * dx4
  90. + ty1 * dy4
  91. + tz1 * dz4 );
  92. d(4,5,i,j) = 0.0;
  93. d(5,1,i,j) = dt * 2.0
  94. * ( tx1 * ( - ( r43*c34 - c1345 ) * tmp3 * ( u(2,i,j,k) *u(2,i,j,k) )
  95. - ( c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  96. - ( c34 - c1345 ) * tmp3 * ( u(4,i,j,k) * u(4,i,j,k) )
  97. - ( c1345 ) * tmp2 * u(5,i,j,k) )
  98. + ty1 * ( - ( c34 - c1345 ) * tmp3 * ( u(2,i,j,k) * u(2,i,j,k) )
  99. - ( r43*c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  100. - ( c34 - c1345 ) * tmp3 * ( u(4,i,j,k) * u(4,i,j,k) )
  101. - ( c1345 ) * tmp2 * u(5,i,j,k) )
  102. + tz1 * ( - ( c34 - c1345 ) * tmp3 * ( u(2,i,j,k) * u(2,i,j,k) )
  103. - ( c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  104. - ( r43*c34 - c1345 ) * tmp3 * ( u(4,i,j,k) *u(4,i,j,k) )
  105. - ( c1345 ) * tmp2 * u(5,i,j,k) ) );
  106. d(5,2,i,j) = dt * 2.0
  107. * ( tx1 * ( r43*c34 - c1345 ) * tmp2 * u(2,i,j,k)
  108. + ty1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k)
  109. + tz1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k) );
  110. d(5,3,i,j) = dt * 2.0
  111. * ( tx1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k)
  112. + ty1 * ( r43*c34 -c1345 ) * tmp2 * u(3,i,j,k)
  113. + tz1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k) );
  114. d(5,4,i,j) = dt * 2.0
  115. * ( tx1 * ( c34 - c1345 ) * tmp2 * u(4,i,j,k)
  116. + ty1 * ( c34 - c1345 ) * tmp2 * u(4,i,j,k)
  117. + tz1 * ( r43*c34 - c1345 ) * tmp2 * u(4,i,j,k) );
  118. d(5,5,i,j) = 1.0
  119. + dt * 2.0 * ( tx1 * c1345 * tmp1
  120. + ty1 * c1345 * tmp1
  121. + tz1 * c1345 * tmp1 )
  122. + dt * 2.0 * ( tx1 * dx5
  123. + ty1 * dy5
  124. + tz1 * dz5 );
  125. //c---------------------------------------------------------------------
  126. //c form the first block sub-diagonal
  127. //c---------------------------------------------------------------------
  128. tmp1 = 1.0 / u(1,i+1,j,k);
  129. tmp2 = tmp1 * tmp1;
  130. tmp3 = tmp1 * tmp2;
  131. a(1,1,i,j) = - dt * tx1 * dx1;
  132. a(1,2,i,j) = dt * tx2;
  133. a(1,3,i,j) = 0.0;
  134. a(1,4,i,j) = 0.0;
  135. a(1,5,i,j) = 0.0;
  136. a(2,1,i,j) = dt * tx2
  137. * ( - ( u(2,i+1,j,k) * tmp1 ) *( u(2,i+1,j,k) * tmp1 )
  138. + c2 * 0.50 * ( u(2,i+1,j,k) * u(2,i+1,j,k)
  139. + u(3,i+1,j,k) * u(3,i+1,j,k)
  140. + u(4,i+1,j,k) * u(4,i+1,j,k) ) * tmp2 )
  141. - dt * tx1 * ( - r43 * c34 * tmp2 * u(2,i+1,j,k) );
  142. a(2,2,i,j) = dt * tx2
  143. * ( ( 2.0 - c2 ) * ( u(2,i+1,j,k) * tmp1 ) )
  144. - dt * tx1 * ( r43 * c34 * tmp1 )
  145. - dt * tx1 * dx2;
  146. a(2,3,i,j) = dt * tx2
  147. * ( - c2 * ( u(3,i+1,j,k) * tmp1 ) );
  148. a(2,4,i,j) = dt * tx2
  149. * ( - c2 * ( u(4,i+1,j,k) * tmp1 ) );
  150. a(2,5,i,j) = dt * tx2 * c2 ;
  151. a(3,1,i,j) = dt * tx2
  152. * ( - ( u(2,i+1,j,k) * u(3,i+1,j,k) ) * tmp2 )
  153. - dt * tx1 * ( - c34 * tmp2 * u(3,i+1,j,k) );
  154. a(3,2,i,j) = dt * tx2 * ( u(3,i+1,j,k) * tmp1 );
  155. a(3,3,i,j) = dt * tx2 * ( u(2,i+1,j,k) * tmp1 )
  156. - dt * tx1 * ( c34 * tmp1 )
  157. - dt * tx1 * dx3;
  158. a(3,4,i,j) = 0.0;
  159. a(3,5,i,j) = 0.0;
  160. a(4,1,i,j) = dt * tx2
  161. * ( - ( u(2,i+1,j,k)*u(4,i+1,j,k) ) * tmp2 )
  162. - dt * tx1 * ( - c34 * tmp2 * u(4,i+1,j,k) );
  163. a(4,2,i,j) = dt * tx2 * ( u(4,i+1,j,k) * tmp1 );
  164. a(4,3,i,j) = 0.0;
  165. a(4,4,i,j) = dt * tx2 * ( u(2,i+1,j,k) * tmp1 )
  166. - dt * tx1 * ( c34 * tmp1 )
  167. - dt * tx1 * dx4;
  168. a(4,5,i,j) = 0.0;
  169. a(5,1,i,j) = dt * tx2
  170. * ( ( c2 * ( u(2,i+1,j,k) * u(2,i+1,j,k)
  171. + u(3,i+1,j,k) * u(3,i+1,j,k)
  172. + u(4,i+1,j,k) * u(4,i+1,j,k) ) * tmp2
  173. - c1 * ( u(5,i+1,j,k) * tmp1 ) )
  174. * ( u(2,i+1,j,k) * tmp1 ) )
  175. - dt * tx1
  176. * ( - ( r43*c34 - c1345 ) * tmp3 * ( u(2,i+1,j,k)*u(2,i+1,j,k) )
  177. - ( c34 - c1345 ) * tmp3 * ( u(3,i+1,j,k)*u(3,i+1,j,k) )
  178. - ( c34 - c1345 ) * tmp3 * ( u(4,i+1,j,k)*u(4,i+1,j,k) )
  179. - c1345 * tmp2 * u(5,i+1,j,k) );
  180. a(5,2,i,j) = dt * tx2
  181. * ( c1 * ( u(5,i+1,j,k) * tmp1 )
  182. - 0.50 * c2
  183. * ( ( 3.0*u(2,i+1,j,k)*u(2,i+1,j,k)
  184. + u(3,i+1,j,k)*u(3,i+1,j,k)
  185. + u(4,i+1,j,k)*u(4,i+1,j,k) ) * tmp2 ) )
  186. - dt * tx1
  187. * ( r43*c34 - c1345 ) * tmp2 * u(2,i+1,j,k);
  188. a(5,3,i,j) = dt * tx2
  189. * ( - c2 * ( u(3,i+1,j,k)*u(2,i+1,j,k) ) * tmp2 )
  190. - dt * tx1
  191. * ( c34 - c1345 ) * tmp2 * u(3,i+1,j,k);
  192. a(5,4,i,j) = dt * tx2
  193. * ( - c2 * ( u(4,i+1,j,k)*u(2,i+1,j,k) ) * tmp2 )
  194. - dt * tx1
  195. * ( c34 - c1345 ) * tmp2 * u(4,i+1,j,k);
  196. a(5,5,i,j) = dt * tx2
  197. * ( c1 * ( u(2,i+1,j,k) * tmp1 ) )
  198. - dt * tx1 * c1345 * tmp1
  199. - dt * tx1 * dx5;
  200. //c---------------------------------------------------------------------
  201. //c form the second block sub-diagonal
  202. //c---------------------------------------------------------------------
  203. tmp1 = 1.0 / u(1,i,j+1,k);
  204. tmp2 = tmp1 * tmp1;
  205. tmp3 = tmp1 * tmp2;
  206. b(1,1,i,j) = - dt * ty1 * dy1;
  207. b(1,2,i,j) = 0.0;
  208. b(1,3,i,j) = dt * ty2;
  209. b(1,4,i,j) = 0.0;
  210. b(1,5,i,j) = 0.0;
  211. b(2,1,i,j) = dt * ty2
  212. * ( - ( u(2,i,j+1,k)*u(3,i,j+1,k) ) * tmp2 )
  213. - dt * ty1 * ( - c34 * tmp2 * u(2,i,j+1,k) );
  214. b(2,2,i,j) = dt * ty2 * ( u(3,i,j+1,k) * tmp1 )
  215. - dt * ty1 * ( c34 * tmp1 )
  216. - dt * ty1 * dy2;
  217. b(2,3,i,j) = dt * ty2 * ( u(2,i,j+1,k) * tmp1 );
  218. b(2,4,i,j) = 0.0;
  219. b(2,5,i,j) = 0.0;
  220. b(3,1,i,j) = dt * ty2
  221. * ( - ( u(3,i,j+1,k) * tmp1 ) * ( u(3,i,j+1,k) * tmp1 )
  222. + 0.50 * c2 * ( ( u(2,i,j+1,k) * u(2,i,j+1,k)
  223. + u(3,i,j+1,k) * u(3,i,j+1,k)
  224. + u(4,i,j+1,k) * u(4,i,j+1,k) )
  225. * tmp2 ) )
  226. - dt * ty1 * ( - r43 * c34 * tmp2 * u(3,i,j+1,k) );
  227. b(3,2,i,j) = dt * ty2
  228. * ( - c2 * ( u(2,i,j+1,k) * tmp1 ) );
  229. b(3,3,i,j) = dt * ty2 * ( ( 2.0 - c2 )
  230. * ( u(3,i,j+1,k) * tmp1 ) )
  231. - dt * ty1 * ( r43 * c34 * tmp1 )
  232. - dt * ty1 * dy3;
  233. b(3,4,i,j) = dt * ty2
  234. * ( - c2 * ( u(4,i,j+1,k) * tmp1 ) );
  235. b(3,5,i,j) = dt * ty2 * c2;
  236. b(4,1,i,j) = dt * ty2
  237. * ( - ( u(3,i,j+1,k)*u(4,i,j+1,k) ) * tmp2 )
  238. - dt * ty1 * ( - c34 * tmp2 * u(4,i,j+1,k) );
  239. b(4,2,i,j) = 0.0;
  240. b(4,3,i,j) = dt * ty2 * ( u(4,i,j+1,k) * tmp1 );
  241. b(4,4,i,j) = dt * ty2 * ( u(3,i,j+1,k) * tmp1 )
  242. - dt * ty1 * ( c34 * tmp1 )
  243. - dt * ty1 * dy4;
  244. b(4,5,i,j) = 0.0;
  245. b(5,1,i,j) = dt * ty2
  246. * ( ( c2 * ( u(2,i,j+1,k) * u(2,i,j+1,k)
  247. + u(3,i,j+1,k) * u(3,i,j+1,k)
  248. + u(4,i,j+1,k) * u(4,i,j+1,k) ) * tmp2
  249. - c1 * ( u(5,i,j+1,k) * tmp1 ) )
  250. * ( u(3,i,j+1,k) * tmp1 ) )
  251. - dt * ty1
  252. * ( - ( c34 - c1345 )*tmp3*(u(2,i,j+1,k)*u(2,i,j+1,k))
  253. - ( r43*c34 - c1345 )*tmp3*(u(3,i,j+1,k)*u(3,i,j+1,k))
  254. - ( c34 - c1345 )*tmp3*(u(4,i,j+1,k)*u(4,i,j+1,k))
  255. - c1345*tmp2*u(5,i,j+1,k) );
  256. b(5,2,i,j) = dt * ty2
  257. * ( - c2 * ( u(2,i,j+1,k)*u(3,i,j+1,k) ) * tmp2 )
  258. - dt * ty1
  259. * ( c34 - c1345 ) * tmp2 * u(2,i,j+1,k);
  260. b(5,3,i,j) = dt * ty2
  261. * ( c1 * ( u(5,i,j+1,k) * tmp1 )
  262. - 0.50 * c2
  263. * ( ( u(2,i,j+1,k)*u(2,i,j+1,k)
  264. + 3.0 * u(3,i,j+1,k)*u(3,i,j+1,k)
  265. + u(4,i,j+1,k)*u(4,i,j+1,k) ) * tmp2 ) )
  266. - dt * ty1
  267. * ( r43*c34 - c1345 ) * tmp2 * u(3,i,j+1,k);
  268. b(5,4,i,j) = dt * ty2
  269. * ( - c2 * ( u(3,i,j+1,k)*u(4,i,j+1,k) ) * tmp2 )
  270. - dt * ty1 * ( c34 - c1345 ) * tmp2 * u(4,i,j+1,k);
  271. b(5,5,i,j) = dt * ty2
  272. * ( c1 * ( u(3,i,j+1,k) * tmp1 ) )
  273. - dt * ty1 * c1345 * tmp1
  274. - dt * ty1 * dy5;
  275. //c---------------------------------------------------------------------
  276. //c form the third block sub-diagonal
  277. //c---------------------------------------------------------------------
  278. tmp1 = 1.0 / u(1,i,j,k+1);
  279. tmp2 = tmp1 * tmp1;
  280. tmp3 = tmp1 * tmp2;
  281. c(1,1,i,j) = - dt * tz1 * dz1;
  282. c(1,2,i,j) = 0.0;
  283. c(1,3,i,j) = 0.0;
  284. c(1,4,i,j) = dt * tz2;
  285. c(1,5,i,j) = 0.0;
  286. c(2,1,i,j) = dt * tz2
  287. * ( - ( u(2,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
  288. - dt * tz1 * ( - c34 * tmp2 * u(2,i,j,k+1) );
  289. c(2,2,i,j) = dt * tz2 * ( u(4,i,j,k+1) * tmp1 )
  290. - dt * tz1 * c34 * tmp1
  291. - dt * tz1 * dz2 ;
  292. c(2,3,i,j) = 0.0;
  293. c(2,4,i,j) = dt * tz2 * ( u(2,i,j,k+1) * tmp1 );
  294. c(2,5,i,j) = 0.0;
  295. c(3,1,i,j) = dt * tz2
  296. * ( - ( u(3,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
  297. - dt * tz1 * ( - c34 * tmp2 * u(3,i,j,k+1) );
  298. c(3,2,i,j) = 0.0;
  299. c(3,3,i,j) = dt * tz2 * ( u(4,i,j,k+1) * tmp1 )
  300. - dt * tz1 * ( c34 * tmp1 )
  301. - dt * tz1 * dz3;
  302. c(3,4,i,j) = dt * tz2 * ( u(3,i,j,k+1) * tmp1 );
  303. c(3,5,i,j) = 0.0;
  304. c(4,1,i,j) = dt * tz2
  305. * ( - ( u(4,i,j,k+1) * tmp1 ) *( u(4,i,j,k+1) * tmp1 )
  306. + 0.50 * c2
  307. * ( ( u(2,i,j,k+1) * u(2,i,j,k+1)
  308. + u(3,i,j,k+1) * u(3,i,j,k+1)
  309. + u(4,i,j,k+1) * u(4,i,j,k+1) ) * tmp2 ) )
  310. - dt * tz1 * ( - r43 * c34 * tmp2 * u(4,i,j,k+1) );
  311. c(4,2,i,j) = dt * tz2
  312. * ( - c2 * ( u(2,i,j,k+1) * tmp1 ) );
  313. c(4,3,i,j) = dt * tz2
  314. * ( - c2 * ( u(3,i,j,k+1) * tmp1 ) );
  315. c(4,4,i,j) = dt * tz2 * ( 2.0 - c2 )
  316. * ( u(4,i,j,k+1) * tmp1 )
  317. - dt * tz1 * ( r43 * c34 * tmp1 )
  318. - dt * tz1 * dz4;
  319. c(4,5,i,j) = dt * tz2 * c2;
  320. c(5,1,i,j) = dt * tz2
  321. * ( ( c2 * ( u(2,i,j,k+1) * u(2,i,j,k+1)
  322. + u(3,i,j,k+1) * u(3,i,j,k+1)
  323. + u(4,i,j,k+1) * u(4,i,j,k+1) ) * tmp2
  324. - c1 * ( u(5,i,j,k+1) * tmp1 ) )
  325. * ( u(4,i,j,k+1) * tmp1 ) )
  326. - dt * tz1
  327. * ( - ( c34 - c1345 ) * tmp3 * (u(2,i,j,k+1)*u(2,i,j,k+1))
  328. - ( c34 - c1345 ) * tmp3 * (u(3,i,j,k+1)*u(3,i,j,k+1))
  329. - ( r43*c34 - c1345 )* tmp3 * (u(4,i,j,k+1)*u(4,i,j,k+1))
  330. - c1345 * tmp2 * u(5,i,j,k+1) );
  331. c(5,2,i,j) = dt * tz2
  332. * ( - c2 * ( u(2,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
  333. - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k+1);
  334. c(5,3,i,j) = dt * tz2
  335. * ( - c2 * ( u(3,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
  336. - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k+1);
  337. c(5,4,i,j) = dt * tz2
  338. * ( c1 * ( u(5,i,j,k+1) * tmp1 )
  339. - 0.50 * c2
  340. * ( ( u(2,i,j,k+1)*u(2,i,j,k+1)
  341. + u(3,i,j,k+1)*u(3,i,j,k+1)
  342. + 3.0*u(4,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 ) )
  343. - dt * tz1 * ( r43*c34 - c1345 ) * tmp2 * u(4,i,j,k+1);
  344. c(5,5,i,j) = dt * tz2
  345. * ( c1 * ( u(4,i,j,k+1) * tmp1 ) )
  346. - dt * tz1 * c1345 * tmp1
  347. - dt * tz1 * dz5;
  348. }
  349. return;
  350. }