jacld.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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 jacld(int k) {
  19. // compute the lower 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. d(1,1,i,j) = 1.0
  38. + dt * 2.0 * ( tx1 * dx1
  39. + ty1 * dy1
  40. + tz1 * dz1 );
  41. d(1,2,i,j) = 0.0;
  42. d(1,3,i,j) = 0.0;
  43. d(1,4,i,j) = 0.0;
  44. d(1,5,i,j) = 0.0;
  45. d(2,1,i,j) = dt * 2.0
  46. * ( tx1 * ( - r43 * c34 * tmp2 * u(2,i,j,k) )
  47. + ty1 * ( - c34 * tmp2 * u(2,i,j,k) )
  48. + tz1 * ( - c34 * tmp2 * u(2,i,j,k) ) );
  49. d(2,2,i,j) = 1.0
  50. + dt * 2.0
  51. * ( tx1 * r43 * c34 * tmp1
  52. + ty1 * c34 * tmp1
  53. + tz1 * c34 * tmp1 )
  54. + dt * 2.0 * ( tx1 * dx2
  55. + ty1 * dy2
  56. + tz1 * dz2 );
  57. d(2,3,i,j) = 0.0;
  58. d(2,4,i,j) = 0.0;
  59. d(2,5,i,j) = 0.0;
  60. d(3,1,i,j) = dt * 2.0
  61. * ( tx1 * ( - c34 * tmp2 * u(3,i,j,k) )
  62. + ty1 * ( - r43 * c34 * tmp2 * u(3,i,j,k) )
  63. + tz1 * ( - c34 * tmp2 * u(3,i,j,k) ) );
  64. d(3,2,i,j) = 0.0;
  65. d(3,3,i,j) = 1.0
  66. + dt * 2.0
  67. * ( tx1 * c34 * tmp1
  68. + ty1 * r43 * c34 * tmp1
  69. + tz1 * c34 * tmp1 )
  70. + dt * 2.0 * ( tx1 * dx3
  71. + ty1 * dy3
  72. + tz1 * dz3 );
  73. d(3,4,i,j) = 0.0;
  74. d(3,5,i,j) = 0.0;
  75. d(4,1,i,j) = dt * 2.0
  76. * ( tx1 * ( - c34 * tmp2 * u(4,i,j,k) )
  77. + ty1 * ( - c34 * tmp2 * u(4,i,j,k) )
  78. + tz1 * ( - r43 * c34 * tmp2 * u(4,i,j,k) ) );
  79. d(4,2,i,j) = 0.0;
  80. d(4,3,i,j) = 0.0;
  81. d(4,4,i,j) = 1.0
  82. + dt * 2.0
  83. * ( tx1 * c34 * tmp1
  84. + ty1 * c34 * tmp1
  85. + tz1 * r43 * c34 * tmp1 )
  86. + dt * 2.0 * ( tx1 * dx4
  87. + ty1 * dy4
  88. + tz1 * dz4 );
  89. d(4,5,i,j) = 0.0;
  90. d(5,1,i,j) = dt * 2.0
  91. * ( tx1 * ( - ( r43*c34 - c1345 ) * tmp3 * ( u(2,i,j,k) * u(2,i,j,k) )
  92. - ( c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  93. - ( c34 - c1345 ) * tmp3 * ( u(4,i,j,k) * u(4,i,j,k) )
  94. - ( c1345 ) * tmp2 * u(5,i,j,k) )
  95. + ty1 * ( - ( c34 - c1345 ) * tmp3 * ( u(2,i,j,k) * u(2,i,j,k) )
  96. - ( r43*c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  97. - ( c34 - c1345 ) * tmp3 * ( u(4,i,j,k) * u(4,i,j,k) )
  98. - ( c1345 ) * tmp2 * u(5,i,j,k) )
  99. + tz1 * ( - ( c34 - c1345 ) * tmp3 * ( u(2,i,j,k) * u(2,i,j,k) )
  100. - ( c34 - c1345 ) * tmp3 * ( u(3,i,j,k) * u(3,i,j,k) )
  101. - ( r43*c34 - c1345 ) * tmp3 * ( u(4,i,j,k) * u(4,i,j,k) )
  102. - ( c1345 ) * tmp2 * u(5,i,j,k) ) );
  103. d(5,2,i,j) = dt * 2.0
  104. * ( tx1 * ( r43*c34 - c1345 ) * tmp2 * u(2,i,j,k)
  105. + ty1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k)
  106. + tz1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k) );
  107. d(5,3,i,j) = dt * 2.0
  108. * ( tx1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k)
  109. + ty1 * ( r43*c34 -c1345 ) * tmp2 * u(3,i,j,k)
  110. + tz1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k) );
  111. d(5,4,i,j) = dt * 2.0
  112. * ( tx1 * ( c34 - c1345 ) * tmp2 * u(4,i,j,k)
  113. + ty1 * ( c34 - c1345 ) * tmp2 * u(4,i,j,k)
  114. + tz1 * ( r43*c34 - c1345 ) * tmp2 * u(4,i,j,k) );
  115. d(5,5,i,j) = 1.0
  116. + dt * 2.0 * ( tx1 * c1345 * tmp1
  117. + ty1 * c1345 * tmp1
  118. + tz1 * c1345 * tmp1 )
  119. + dt * 2.0 * ( tx1 * dx5
  120. + ty1 * dy5
  121. + tz1 * dz5 );
  122. //c---------------------------------------------------------------------
  123. //c form the first block sub-diagonal
  124. //c---------------------------------------------------------------------
  125. tmp1 = 1.0 / u(1,i,j,k-1);
  126. tmp2 = tmp1 * tmp1;
  127. tmp3 = tmp1 * tmp2;
  128. a(1,1,i,j) = - dt * tz1 * dz1;
  129. a(1,2,i,j) = 0.0;
  130. a(1,3,i,j) = 0.0;
  131. a(1,4,i,j) = - dt * tz2;
  132. a(1,5,i,j) = 0.0;
  133. a(2,1,i,j) = - dt * tz2
  134. * ( - ( u(2,i,j,k-1)*u(4,i,j,k-1) ) * tmp2 )
  135. - dt * tz1 * ( - c34 * tmp2 * u(2,i,j,k-1) );
  136. a(2,2,i,j) = - dt * tz2 * ( u(4,i,j,k-1) * tmp1 )
  137. - dt * tz1 * c34 * tmp1
  138. - dt * tz1 * dz2 ;
  139. a(2,3,i,j) = 0.0;
  140. a(2,4,i,j) = - dt * tz2 * ( u(2,i,j,k-1) * tmp1 );
  141. a(2,5,i,j) = 0.0;
  142. a(3,1,i,j) = - dt * tz2
  143. * ( - ( u(3,i,j,k-1)*u(4,i,j,k-1) ) * tmp2 )
  144. - dt * tz1 * ( - c34 * tmp2 * u(3,i,j,k-1) );
  145. a(3,2,i,j) = 0.0;
  146. a(3,3,i,j) = - dt * tz2 * ( u(4,i,j,k-1) * tmp1 )
  147. - dt * tz1 * ( c34 * tmp1 )
  148. - dt * tz1 * dz3;
  149. a(3,4,i,j) = - dt * tz2 * ( u(3,i,j,k-1) * tmp1 );
  150. a(3,5,i,j) = 0.0;
  151. a(4,1,i,j) = - dt * tz2
  152. * ( - ( u(4,i,j,k-1) * tmp1 ) * ( u(4,i,j,k-1) * tmp1 )
  153. + 0.50 * c2
  154. * ( ( u(2,i,j,k-1) * u(2,i,j,k-1)
  155. + u(3,i,j,k-1) * u(3,i,j,k-1)
  156. + u(4,i,j,k-1) * u(4,i,j,k-1) ) * tmp2 ) )
  157. - dt * tz1 * ( - r43 * c34 * tmp2 * u(4,i,j,k-1) );
  158. a(4,2,i,j) = - dt * tz2
  159. * ( - c2 * ( u(2,i,j,k-1) * tmp1 ) );
  160. a(4,3,i,j) = - dt * tz2
  161. * ( - c2 * ( u(3,i,j,k-1) * tmp1 ) );
  162. a(4,4,i,j) = - dt * tz2 * ( 2.0 - c2 )
  163. * ( u(4,i,j,k-1) * tmp1 )
  164. - dt * tz1 * ( r43 * c34 * tmp1 )
  165. - dt * tz1 * dz4;
  166. a(4,5,i,j) = - dt * tz2 * c2;
  167. a(5,1,i,j) = - dt * tz2
  168. * ( ( c2 * ( u(2,i,j,k-1) * u(2,i,j,k-1)
  169. + u(3,i,j,k-1) * u(3,i,j,k-1)
  170. + u(4,i,j,k-1) * u(4,i,j,k-1) ) * tmp2
  171. - c1 * ( u(5,i,j,k-1) * tmp1 ) )
  172. * ( u(4,i,j,k-1) * tmp1 ) )
  173. - dt * tz1
  174. * ( - ( c34 - c1345 ) * tmp3 * (u(2,i,j,k-1)*u(2,i,j,k-1))
  175. - ( c34 - c1345 ) * tmp3 * (u(3,i,j,k-1)*u(3,i,j,k-1))
  176. - ( r43*c34 - c1345 )* tmp3 * (u(4,i,j,k-1)*u(4,i,j,k-1))
  177. - c1345 * tmp2 * u(5,i,j,k-1) );
  178. a(5,2,i,j) = - dt * tz2
  179. * ( - c2 * ( u(2,i,j,k-1)*u(4,i,j,k-1) ) * tmp2 )
  180. - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k-1);
  181. a(5,3,i,j) = - dt * tz2
  182. * ( - c2 * ( u(3,i,j,k-1)*u(4,i,j,k-1) ) * tmp2 )
  183. - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k-1);
  184. a(5,4,i,j) = - dt * tz2
  185. * ( c1 * ( u(5,i,j,k-1) * tmp1 )
  186. - 0.50 * c2
  187. * ( ( u(2,i,j,k-1)*u(2,i,j,k-1)
  188. + u(3,i,j,k-1)*u(3,i,j,k-1)
  189. + 3.0*u(4,i,j,k-1)*u(4,i,j,k-1) ) * tmp2 ) )
  190. - dt * tz1 * ( r43*c34 - c1345 ) * tmp2 * u(4,i,j,k-1);
  191. a(5,5,i,j) = - dt * tz2
  192. * ( c1 * ( u(4,i,j,k-1) * tmp1 ) )
  193. - dt * tz1 * c1345 * tmp1
  194. - dt * tz1 * dz5;
  195. //c---------------------------------------------------------------------
  196. //c form the second block sub-diagonal
  197. //c---------------------------------------------------------------------
  198. tmp1 = 1.0 / u(1,i,j-1,k);
  199. tmp2 = tmp1 * tmp1;
  200. tmp3 = tmp1 * tmp2;
  201. b(1,1,i,j) = - dt * ty1 * dy1;
  202. b(1,2,i,j) = 0.0;
  203. b(1,3,i,j) = - dt * ty2;
  204. b(1,4,i,j) = 0.0;
  205. b(1,5,i,j) = 0.0;
  206. b(2,1,i,j) = - dt * ty2
  207. * ( - ( u(2,i,j-1,k)*u(3,i,j-1,k) ) * tmp2 )
  208. - dt * ty1 * ( - c34 * tmp2 * u(2,i,j-1,k) );
  209. b(2,2,i,j) = - dt * ty2 * ( u(3,i,j-1,k) * tmp1 )
  210. - dt * ty1 * ( c34 * tmp1 )
  211. - dt * ty1 * dy2;
  212. b(2,3,i,j) = - dt * ty2 * ( u(2,i,j-1,k) * tmp1 );
  213. b(2,4,i,j) = 0.0;
  214. b(2,5,i,j) = 0.0;
  215. b(3,1,i,j) = - dt * ty2
  216. * ( - ( u(3,i,j-1,k) * tmp1 ) *( u(3,i,j-1,k) * tmp1 )
  217. + 0.50 * c2 * ( ( u(2,i,j-1,k) * u(2,i,j-1,k)
  218. + u(3,i,j-1,k) * u(3,i,j-1,k)
  219. + u(4,i,j-1,k) * u(4,i,j-1,k) )
  220. * tmp2 ) )
  221. - dt * ty1 * ( - r43 * c34 * tmp2 * u(3,i,j-1,k) );
  222. b(3,2,i,j) = - dt * ty2
  223. * ( - c2 * ( u(2,i,j-1,k) * tmp1 ) );
  224. b(3,3,i,j) = - dt * ty2 * ( ( 2.0 - c2 )
  225. * ( u(3,i,j-1,k) * tmp1 ) )
  226. - dt * ty1 * ( r43 * c34 * tmp1 )
  227. - dt * ty1 * dy3;
  228. b(3,4,i,j) = - dt * ty2
  229. * ( - c2 * ( u(4,i,j-1,k) * tmp1 ) );
  230. b(3,5,i,j) = - dt * ty2 * c2;
  231. b(4,1,i,j) = - dt * ty2
  232. * ( - ( u(3,i,j-1,k)*u(4,i,j-1,k) ) * tmp2 )
  233. - dt * ty1 * ( - c34 * tmp2 * u(4,i,j-1,k) );
  234. b(4,2,i,j) = 0.0;
  235. b(4,3,i,j) = - dt * ty2 * ( u(4,i,j-1,k) * tmp1 );
  236. b(4,4,i,j) = - dt * ty2 * ( u(3,i,j-1,k) * tmp1 )
  237. - dt * ty1 * ( c34 * tmp1 )
  238. - dt * ty1 * dy4;
  239. b(4,5,i,j) = 0.0;
  240. b(5,1,i,j) = - dt * ty2
  241. * ( ( c2 * ( u(2,i,j-1,k) * u(2,i,j-1,k)
  242. + u(3,i,j-1,k) * u(3,i,j-1,k)
  243. + u(4,i,j-1,k) * u(4,i,j-1,k) ) * tmp2
  244. - c1 * ( u(5,i,j-1,k) * tmp1 ) )
  245. * ( u(3,i,j-1,k) * tmp1 ) )
  246. - dt * ty1
  247. * ( - ( c34 - c1345 )*tmp3*(u(2,i,j-1,k)*u(2,i,j-1,k))
  248. - ( r43*c34 - c1345 )*tmp3*(u(3,i,j-1,k)*u(3,i,j-1,k))
  249. - ( c34 - c1345 )*tmp3*(u(4,i,j-1,k)*u(4,i,j-1,k))
  250. - c1345*tmp2*u(5,i,j-1,k) );
  251. b(5,2,i,j) = - dt * ty2
  252. * ( - c2 * ( u(2,i,j-1,k)*u(3,i,j-1,k) ) * tmp2 )
  253. - dt * ty1
  254. * ( c34 - c1345 ) * tmp2 * u(2,i,j-1,k);
  255. b(5,3,i,j) = - dt * ty2
  256. * ( c1 * ( u(5,i,j-1,k) * tmp1 )
  257. - 0.50 * c2
  258. * ( ( u(2,i,j-1,k)*u(2,i,j-1,k)
  259. + 3.0 * u(3,i,j-1,k)*u(3,i,j-1,k)
  260. + u(4,i,j-1,k)*u(4,i,j-1,k) ) * tmp2 ) )
  261. - dt * ty1
  262. * ( r43*c34 - c1345 ) * tmp2 * u(3,i,j-1,k);
  263. b(5,4,i,j) = - dt * ty2
  264. * ( - c2 * ( u(3,i,j-1,k)*u(4,i,j-1,k) ) * tmp2 )
  265. - dt * ty1 * ( c34 - c1345 ) * tmp2 * u(4,i,j-1,k);
  266. b(5,5,i,j) = - dt * ty2
  267. * ( c1 * ( u(3,i,j-1,k) * tmp1 ) )
  268. - dt * ty1 * c1345 * tmp1
  269. - dt * ty1 * dy5;
  270. //c---------------------------------------------------------------------
  271. //c form the third block sub-diagonal
  272. //c---------------------------------------------------------------------
  273. tmp1 = 1.0 / u(1,i-1,j,k);
  274. tmp2 = tmp1 * tmp1;
  275. tmp3 = tmp1 * tmp2;
  276. c(1,1,i,j) = - dt * tx1 * dx1;
  277. c(1,2,i,j) = - dt * tx2;
  278. c(1,3,i,j) = 0.0;
  279. c(1,4,i,j) = 0.0;
  280. c(1,5,i,j) = 0.0;
  281. c(2,1,i,j) = - dt * tx2
  282. * ( - ( u(2,i-1,j,k) * tmp1 ) *( u(2,i-1,j,k) * tmp1 )
  283. + c2 * 0.50 * ( u(2,i-1,j,k) * u(2,i-1,j,k)
  284. + u(3,i-1,j,k) * u(3,i-1,j,k)
  285. + u(4,i-1,j,k) * u(4,i-1,j,k) ) * tmp2 )
  286. - dt * tx1 * ( - r43 * c34 * tmp2 * u(2,i-1,j,k) );
  287. c(2,2,i,j) = - dt * tx2
  288. * ( ( 2.0 - c2 ) * ( u(2,i-1,j,k) * tmp1 ) )
  289. - dt * tx1 * ( r43 * c34 * tmp1 )
  290. - dt * tx1 * dx2;
  291. c(2,3,i,j) = - dt * tx2
  292. * ( - c2 * ( u(3,i-1,j,k) * tmp1 ) );
  293. c(2,4,i,j) = - dt * tx2
  294. * ( - c2 * ( u(4,i-1,j,k) * tmp1 ) );
  295. c(2,5,i,j) = - dt * tx2 * c2 ;
  296. c(3,1,i,j) = - dt * tx2
  297. * ( - ( u(2,i-1,j,k) * u(3,i-1,j,k) ) * tmp2 )
  298. - dt * tx1 * ( - c34 * tmp2 * u(3,i-1,j,k) );
  299. c(3,2,i,j) = - dt * tx2 * ( u(3,i-1,j,k) * tmp1 );
  300. c(3,3,i,j) = - dt * tx2 * ( u(2,i-1,j,k) * tmp1 )
  301. - dt * tx1 * ( c34 * tmp1 )
  302. - dt * tx1 * dx3;
  303. c(3,4,i,j) = 0.0;
  304. c(3,5,i,j) = 0.0;
  305. c(4,1,i,j) = - dt * tx2
  306. * ( - ( u(2,i-1,j,k)*u(4,i-1,j,k) ) * tmp2 )
  307. - dt * tx1 * ( - c34 * tmp2 * u(4,i-1,j,k) );
  308. c(4,2,i,j) = - dt * tx2 * ( u(4,i-1,j,k) * tmp1 );
  309. c(4,3,i,j) = 0.0;
  310. c(4,4,i,j) = - dt * tx2 * ( u(2,i-1,j,k) * tmp1 )
  311. - dt * tx1 * ( c34 * tmp1 )
  312. - dt * tx1 * dx4;
  313. c(4,5,i,j) = 0.0;
  314. c(5,1,i,j) = - dt * tx2
  315. * ( ( c2 * ( u(2,i-1,j,k) * u(2,i-1,j,k)
  316. + u(3,i-1,j,k) * u(3,i-1,j,k)
  317. + u(4,i-1,j,k) * u(4,i-1,j,k) ) * tmp2
  318. - c1 * ( u(5,i-1,j,k) * tmp1 ) )
  319. * ( u(2,i-1,j,k) * tmp1 ) )
  320. - dt * tx1
  321. * ( - ( r43*c34 - c1345 ) * tmp3 * ( u(2,i-1,j,k)*u(2,i-1,j,k) )
  322. - ( c34 - c1345 ) * tmp3 * ( u(3,i-1,j,k)*u(3,i-1,j,k) )
  323. - ( c34 - c1345 ) * tmp3 * ( u(4,i-1,j,k)*u(4,i-1,j,k) )
  324. - c1345 * tmp2 * u(5,i-1,j,k) );
  325. c(5,2,i,j) = - dt * tx2
  326. * ( c1 * ( u(5,i-1,j,k) * tmp1 )
  327. - 0.50 * c2
  328. * ( ( 3.0*u(2,i-1,j,k)*u(2,i-1,j,k)
  329. + u(3,i-1,j,k)*u(3,i-1,j,k)
  330. + u(4,i-1,j,k)*u(4,i-1,j,k) ) * tmp2 ) )
  331. - dt * tx1
  332. * ( r43*c34 - c1345 ) * tmp2 * u(2,i-1,j,k);
  333. c(5,3,i,j) = - dt * tx2
  334. * ( - c2 * ( u(3,i-1,j,k)*u(2,i-1,j,k) ) * tmp2 )
  335. - dt * tx1
  336. * ( c34 - c1345 ) * tmp2 * u(3,i-1,j,k);
  337. c(5,4,i,j) = - dt * tx2
  338. * ( - c2 * ( u(4,i-1,j,k)*u(2,i-1,j,k) ) * tmp2 )
  339. - dt * tx1
  340. * ( c34 - c1345 ) * tmp2 * u(4,i-1,j,k);
  341. c(5,5,i,j) = - dt * tx2
  342. * ( c1 * ( u(2,i-1,j,k) * tmp1 ) )
  343. - dt * tx1 * c1345 * tmp1
  344. - dt * tx1 * dx5;
  345. }
  346. return;
  347. }