erhs.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  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 erhs(){
  19. // compute the right hand side based on exact solution
  20. //c---------------------------------------------------------------------
  21. //c local variables
  22. //c---------------------------------------------------------------------
  23. int i, j, k, m;
  24. int iglob, jglob;
  25. int iex;
  26. int L1, L2;
  27. int ist1, iend1;
  28. int jst1, jend1;
  29. double dsspm;
  30. double xi, eta, zeta;
  31. double q;
  32. double u21, u31, u41;
  33. double tmp;
  34. double u21i, u31i, u41i, u51i;
  35. double u21j, u31j, u41j, u51j;
  36. double u21k, u31k, u41k, u51k;
  37. double u21im1, u31im1, u41im1, u51im1;
  38. double u21jm1, u31jm1, u41jm1, u51jm1;
  39. double u21km1, u31km1, u41km1, u51km1;
  40. dsspm = dssp;
  41. for (k=1; k<=nz; k++)
  42. for (j=1; j<=ny; j++)
  43. for (i=1; i<=nx; i++)
  44. for (m=1; m<=5; m++)
  45. frct( m, i, j, k ) = 0.0;
  46. for (k=1; k<=nz; k++) {
  47. zeta = ( (double)(k-1) ) / ( nz - 1 );
  48. for (j=1; j<=ny; j++) {
  49. jglob = jpt + j;
  50. eta = ( (double)(jglob-1) ) / ( ny0 - 1 );
  51. for (i=1; i<=nx; i++) {
  52. iglob = ipt + i;
  53. xi = ( (double)(iglob-1) ) / ( nx0 - 1 );
  54. for (m=1; m<=5; m++) {
  55. rsd(m,i,j,k) = ce(m,1)
  56. + ce(m,2) * xi
  57. + ce(m,3) * eta
  58. + ce(m,4) * zeta
  59. + ce(m,5) * xi * xi
  60. + ce(m,6) * eta * eta
  61. + ce(m,7) * zeta * zeta
  62. + ce(m,8) * xi * xi * xi
  63. + ce(m,9) * eta * eta * eta
  64. + ce(m,10) * zeta * zeta * zeta
  65. + ce(m,11) * xi * xi * xi * xi
  66. + ce(m,12) * eta * eta * eta * eta
  67. + ce(m,13) * zeta * zeta * zeta * zeta;
  68. }
  69. }
  70. }
  71. }
  72. //c---------------------------------------------------------------------
  73. //c xi-direction flux differences
  74. //c---------------------------------------------------------------------
  75. //c
  76. //c iex = flag : iex = 0 north/south communication
  77. //c : iex = 1 east/west communication
  78. //c
  79. //c---------------------------------------------------------------------
  80. iex = 0;
  81. //c---------------------------------------------------------------------
  82. //c communicate and receive/send two rows of data
  83. //c---------------------------------------------------------------------
  84. //
  85. exchange_3(rsd,iex);
  86. L1 = 0;
  87. if (north == -1) L1 = 1;
  88. L2 = nx + 1;
  89. if (south == -1) L2 = nx;
  90. ist1 = 1;
  91. iend1 = nx;
  92. if (north == -1) ist1 = 4;
  93. if (south == -1) iend1 = nx - 3;
  94. for (k=2; k<=nz-1; k++)
  95. for (j=jst; j<=jend; j++)
  96. for (i=L1; i<=L2; i++) {
  97. flux(1,i,j,k) = rsd(2,i,j,k);
  98. u21 = rsd(2,i,j,k) / rsd(1,i,j,k);
  99. q = 0.50 * ( rsd(2,i,j,k) * rsd(2,i,j,k)
  100. + rsd(3,i,j,k) * rsd(3,i,j,k)
  101. + rsd(4,i,j,k) * rsd(4,i,j,k) )
  102. / rsd(1,i,j,k);
  103. flux(2,i,j,k) = rsd(2,i,j,k) * u21 + c2 *
  104. ( rsd(5,i,j,k) - q );
  105. flux(3,i,j,k) = rsd(3,i,j,k) * u21;
  106. flux(4,i,j,k) = rsd(4,i,j,k) * u21;
  107. flux(5,i,j,k) = ( c1 * rsd(5,i,j,k) - c2 * q ) * u21;
  108. }
  109. for (k=2; k<=nz-1; k++)
  110. for (j=jst; j<=jend; j++) {
  111. for (i=ist; i<=iend; i++)
  112. for (m=1; m<=5; m++)
  113. frct(m,i,j,k) = frct(m,i,j,k)
  114. - tx2 * ( flux(m,i+1,j,k) - flux(m,i-1,j,k) );
  115. for (i=ist; i<=L2; i++) {
  116. tmp = 1.0 / rsd(1,i,j,k);
  117. u21i = tmp * rsd(2,i,j,k);
  118. u31i = tmp * rsd(3,i,j,k);
  119. u41i = tmp * rsd(4,i,j,k);
  120. u51i = tmp * rsd(5,i,j,k);
  121. tmp = 1.0 / rsd(1,i-1,j,k);
  122. u21im1 = tmp * rsd(2,i-1,j,k);
  123. u31im1 = tmp * rsd(3,i-1,j,k);
  124. u41im1 = tmp * rsd(4,i-1,j,k);
  125. u51im1 = tmp * rsd(5,i-1,j,k);
  126. flux(2,i,j,k) = (4.0/3.0) * tx3 *
  127. ( u21i - u21im1 );
  128. flux(3,i,j,k) = tx3 * ( u31i - u31im1 );
  129. flux(4,i,j,k) = tx3 * ( u41i - u41im1 );
  130. flux(5,i,j,k) = 0.50 * ( 1.0 - c1*c5 )
  131. * tx3 * ( ( u21i*u21i + u31i*u31i + u41i*u41i )
  132. - ( u21im1*u21im1 + u31im1*u31im1 + u41im1*u41im1 ) )
  133. + (1.0/6.0)
  134. * tx3 * ( u21i*u21i - u21im1*u21im1 )
  135. + c1 * c5 * tx3 * ( u51i - u51im1 );
  136. }
  137. for (i=ist; i<=iend; i++) {
  138. frct(1,i,j,k) = frct(1,i,j,k)
  139. + dx1 * tx1 * ( rsd(1,i-1,j,k)
  140. - 2.0 * rsd(1,i,j,k)
  141. + rsd(1,i+1,j,k) );
  142. frct(2,i,j,k) = frct(2,i,j,k)
  143. + tx3 * c3 * c4 * ( flux(2,i+1,j,k) - flux(2,i,j,k) )
  144. + dx2 * tx1 * ( rsd(2,i-1,j,k)
  145. - 2.0 * rsd(2,i,j,k)
  146. + rsd(2,i+1,j,k) );
  147. frct(3,i,j,k) = frct(3,i,j,k)
  148. + tx3 * c3 * c4 * ( flux(3,i+1,j,k) - flux(3,i,j,k) )
  149. + dx3 * tx1 * ( rsd(3,i-1,j,k)
  150. - 2.0 * rsd(3,i,j,k)
  151. + rsd(3,i+1,j,k) );
  152. frct(4,i,j,k) = frct(4,i,j,k)
  153. + tx3 * c3 * c4 * ( flux(4,i+1,j,k) - flux(4,i,j,k) )
  154. + dx4 * tx1 * ( rsd(4,i-1,j,k)
  155. - 2.0 * rsd(4,i,j,k)
  156. + rsd(4,i+1,j,k) );
  157. frct(5,i,j,k) = frct(5,i,j,k)
  158. + tx3 * c3 * c4 * ( flux(5,i+1,j,k) - flux(5,i,j,k) )
  159. + dx5 * tx1 * ( rsd(5,i-1,j,k)
  160. - 2.0 * rsd(5,i,j,k)
  161. + rsd(5,i+1,j,k) );
  162. }
  163. //c---------------------------------------------------------------------
  164. //c Fourth-order dissipation
  165. //c---------------------------------------------------------------------
  166. if (north == -1) {
  167. for (m=1; m<=5; m++) {
  168. frct(m,2,j,k) = frct(m,2,j,k)
  169. - dsspm * ( + 5.0 * rsd(m,2,j,k)
  170. - 4.0 * rsd(m,3,j,k)
  171. + rsd(m,4,j,k) );
  172. frct(m,3,j,k) = frct(m,3,j,k)
  173. - dsspm * ( - 4.0 * rsd(m,2,j,k)
  174. + 6.0 * rsd(m,3,j,k)
  175. - 4.0 * rsd(m,4,j,k)
  176. + rsd(m,5,j,k) );
  177. }
  178. }
  179. for (i=ist1; i<=iend1; i++)
  180. for (m=1; m<=5; m++)
  181. frct(m,i,j,k) = frct(m,i,j,k)
  182. - dsspm * ( rsd(m,i-2,j,k)
  183. - 4.0 * rsd(m,i-1,j,k)
  184. + 6.0 * rsd(m,i,j,k)
  185. - 4.0 * rsd(m,i+1,j,k)
  186. + rsd(m,i+2,j,k) );
  187. if (south == -1) {
  188. for (m=1; m<=5; m++) {
  189. frct(m,nx-2,j,k) = frct(m,nx-2,j,k)
  190. - dsspm * ( rsd(m,nx-4,j,k)
  191. - 4.0 * rsd(m,nx-3,j,k)
  192. + 6.0 * rsd(m,nx-2,j,k)
  193. - 4.0 * rsd(m,nx-1,j,k) );
  194. frct(m,nx-1,j,k) = frct(m,nx-1,j,k)
  195. - dsspm * ( rsd(m,nx-3,j,k)
  196. - 4.0 * rsd(m,nx-2,j,k)
  197. + 5.0 * rsd(m,nx-1,j,k) );
  198. }
  199. }
  200. }
  201. //c---------------------------------------------------------------------
  202. //c eta-direction flux differences
  203. //c---------------------------------------------------------------------
  204. //c
  205. //c iex = flag : iex = 0 north/south communication
  206. //c : iex = 1 east/west communication
  207. //c
  208. //c---------------------------------------------------------------------
  209. iex = 1;
  210. //c---------------------------------------------------------------------
  211. //c communicate and receive/send two rows of data
  212. //c---------------------------------------------------------------------
  213. exchange_3(rsd,iex);
  214. L1 = 0;
  215. if (west == -1) L1 = 1;
  216. L2 = ny + 1;
  217. if (east == -1) L2 = ny;
  218. jst1 = 1;
  219. jend1 = ny;
  220. if (west == -1) jst1 = 4;
  221. if (east == -1) jend1 = ny - 3;
  222. for (k=2; k<=nz-1; k++)
  223. for (j=L1; j<=L2; j++)
  224. for (i=ist; i<=iend; i++) {
  225. flux(1,i,j,k) = rsd(3,i,j,k);
  226. u31 = rsd(3,i,j,k) / rsd(1,i,j,k);
  227. q = 0.50 * ( rsd(2,i,j,k) * rsd(2,i,j,k)
  228. + rsd(3,i,j,k) * rsd(3,i,j,k)
  229. + rsd(4,i,j,k) * rsd(4,i,j,k) )
  230. / rsd(1,i,j,k);
  231. flux(2,i,j,k) = rsd(2,i,j,k) * u31 ;
  232. flux(3,i,j,k) = rsd(3,i,j,k) * u31 + c2 *
  233. ( rsd(5,i,j,k) - q );
  234. flux(4,i,j,k) = rsd(4,i,j,k) * u31;
  235. flux(5,i,j,k) = ( c1 * rsd(5,i,j,k) - c2 * q ) * u31;
  236. }
  237. for (k=2; k<=nz-1; k++) {
  238. for (i=ist; i<=iend; i++)
  239. for (j=jst; j<=jend; j++)
  240. for (m=1; m<=5; m++)
  241. frct(m,i,j,k) = frct(m,i,j,k)
  242. - ty2 * ( flux(m,i,j+1,k) - flux(m,i,j-1,k) );
  243. for (j=jst; j<=L2; j++)
  244. for (i=ist; i<=iend; i++) {
  245. tmp = 1.0 / rsd(1,i,j,k);
  246. u21j = tmp * rsd(2,i,j,k);
  247. u31j = tmp * rsd(3,i,j,k);
  248. u41j = tmp * rsd(4,i,j,k);
  249. u51j = tmp * rsd(5,i,j,k);
  250. tmp = 1.0 / rsd(1,i,j-1,k);
  251. u21jm1 = tmp * rsd(2,i,j-1,k);
  252. u31jm1 = tmp * rsd(3,i,j-1,k);
  253. u41jm1 = tmp * rsd(4,i,j-1,k);
  254. u51jm1 = tmp * rsd(5,i,j-1,k);
  255. flux(2,i,j,k) = ty3 * ( u21j - u21jm1 );
  256. flux(3,i,j,k) = (4.0/3.0) * ty3 *
  257. ( u31j - u31jm1 );
  258. flux(4,i,j,k) = ty3 * ( u41j - u41jm1 );
  259. flux(5,i,j,k) = 0.50 * ( 1.0 - c1*c5 )
  260. * ty3 * ( ( u21j*u21j + u31j*u31j + u41j*u41j )
  261. - ( u21jm1*u21jm1 + u31jm1*u31jm1 + u41jm1*u41jm1 ) )
  262. + (1.0/6.0)
  263. * ty3 * ( u31j*u31j - u31jm1*u31jm1 )
  264. + c1 * c5 * ty3 * ( u51j - u51jm1 );
  265. }
  266. for (j=jst; j<=jend; j++)
  267. for (i=ist; i<=iend; i++) {
  268. frct(1,i,j,k) = frct(1,i,j,k)
  269. + dy1 * ty1 * ( rsd(1,i,j-1,k)
  270. - 2.0 * rsd(1,i,j,k)
  271. + rsd(1,i,j+1,k) );
  272. frct(2,i,j,k) = frct(2,i,j,k)
  273. + ty3 * c3 * c4 * ( flux(2,i,j+1,k) - flux(2,i,j,k) )
  274. + dy2 * ty1 * ( rsd(2,i,j-1,k)
  275. - 2.0 * rsd(2,i,j,k)
  276. + rsd(2,i,j+1,k) );
  277. frct(3,i,j,k) = frct(3,i,j,k)
  278. + ty3 * c3 * c4 * ( flux(3,i,j+1,k) - flux(3,i,j,k) )
  279. + dy3 * ty1 * ( rsd(3,i,j-1,k)
  280. - 2.0 * rsd(3,i,j,k)
  281. + rsd(3,i,j+1,k) );
  282. frct(4,i,j,k) = frct(4,i,j,k)
  283. + ty3 * c3 * c4 * ( flux(4,i,j+1,k) - flux(4,i,j,k) )
  284. + dy4 * ty1 * ( rsd(4,i,j-1,k)
  285. - 2.0 * rsd(4,i,j,k)
  286. + rsd(4,i,j+1,k) );
  287. frct(5,i,j,k) = frct(5,i,j,k)
  288. + ty3 * c3 * c4 * ( flux(5,i,j+1,k) - flux(5,i,j,k) )
  289. + dy5 * ty1 * ( rsd(5,i,j-1,k)
  290. - 2.0 * rsd(5,i,j,k)
  291. + rsd(5,i,j+1,k) );
  292. }
  293. //c---------------------------------------------------------------------
  294. //c fourth-order dissipation
  295. //c---------------------------------------------------------------------
  296. if (west == -1) {
  297. for (i=ist; i<=iend; i++)
  298. for (m=1; m<=5; m++) {
  299. frct(m,i,2,k) = frct(m,i,2,k)
  300. - dsspm * ( + 5.0 * rsd(m,i,2,k)
  301. - 4.0 * rsd(m,i,3,k)
  302. + rsd(m,i,4,k) );
  303. frct(m,i,3,k) = frct(m,i,3,k)
  304. - dsspm * ( - 4.0 * rsd(m,i,2,k)
  305. + 6.0 * rsd(m,i,3,k)
  306. - 4.0 * rsd(m,i,4,k)
  307. + rsd(m,i,5,k) );
  308. }
  309. }
  310. for (j=jst1; j<=jend1; j++)
  311. for (i=ist; i<=iend; i++)
  312. for (m=1; m<=5; m++)
  313. frct(m,i,j,k) = frct(m,i,j,k)
  314. - dsspm * ( rsd(m,i,j-2,k)
  315. - 4.0 * rsd(m,i,j-1,k)
  316. + 6.0 * rsd(m,i,j,k)
  317. - 4.0 * rsd(m,i,j+1,k)
  318. + rsd(m,i,j+2,k) );
  319. if (east == -1) {
  320. for (i=ist; i<=iend; i++)
  321. for (m=1; m<=5; m++) {
  322. frct(m,i,ny-2,k) = frct(m,i,ny-2,k)
  323. - dsspm * ( rsd(m,i,ny-4,k)
  324. - 4.0 * rsd(m,i,ny-3,k)
  325. + 6.0 * rsd(m,i,ny-2,k)
  326. - 4.0 * rsd(m,i,ny-1,k) );
  327. frct(m,i,ny-1,k) = frct(m,i,ny-1,k)
  328. - dsspm * ( rsd(m,i,ny-3,k)
  329. - 4.0 * rsd(m,i,ny-2,k)
  330. + 5.0 * rsd(m,i,ny-1,k) );
  331. }
  332. }
  333. }
  334. //c---------------------------------------------------------------------
  335. //c zeta-direction flux differences
  336. //c---------------------------------------------------------------------
  337. for (k=1; k<=nz; k++)
  338. for (j=jst; j<=jend; j++)
  339. for (i=ist; i<=iend; i++) {
  340. flux(1,i,j,k) = rsd(4,i,j,k);
  341. u41 = rsd(4,i,j,k) / rsd(1,i,j,k);
  342. q = 0.50 * ( rsd(2,i,j,k) * rsd(2,i,j,k)
  343. + rsd(3,i,j,k) * rsd(3,i,j,k)
  344. + rsd(4,i,j,k) * rsd(4,i,j,k) )
  345. / rsd(1,i,j,k);
  346. flux(2,i,j,k) = rsd(2,i,j,k) * u41 ;
  347. flux(3,i,j,k) = rsd(3,i,j,k) * u41 ;
  348. flux(4,i,j,k) = rsd(4,i,j,k) * u41 + c2 *
  349. ( rsd(5,i,j,k) - q );
  350. flux(5,i,j,k) = ( c1 * rsd(5,i,j,k) - c2 * q ) * u41;
  351. }
  352. for (k=2; k<=nz-1; k++)
  353. for (j=jst; j<=jend; j++)
  354. for (i=ist; i<=iend; i++)
  355. for (m=1; m<=5; m++)
  356. frct(m,i,j,k) = frct(m,i,j,k)
  357. - tz2 * ( flux(m,i,j,k+1) - flux(m,i,j,k-1) );
  358. for (k=2; k<=nz; k++)
  359. for (j=jst; j<=jend; j++)
  360. for (i=ist; i<=iend; i++) {
  361. tmp = 1.0 / rsd(1,i,j,k);
  362. u21k = tmp * rsd(2,i,j,k);
  363. u31k = tmp * rsd(3,i,j,k);
  364. u41k = tmp * rsd(4,i,j,k);
  365. u51k = tmp * rsd(5,i,j,k);
  366. tmp = 1.0 / rsd(1,i,j,k-1);
  367. u21km1 = tmp * rsd(2,i,j,k-1);
  368. u31km1 = tmp * rsd(3,i,j,k-1);
  369. u41km1 = tmp * rsd(4,i,j,k-1);
  370. u51km1 = tmp * rsd(5,i,j,k-1);
  371. flux(2,i,j,k) = tz3 * ( u21k - u21km1 );
  372. flux(3,i,j,k) = tz3 * ( u31k - u31km1 );
  373. flux(4,i,j,k) = (4.0/3.0) * tz3 * ( u41k
  374. - u41km1 );
  375. flux(5,i,j,k) = 0.50 * ( 1.0 - c1*c5 )
  376. * tz3 * ( ( u21k*u21k + u31k*u31k + u41k*u41k )
  377. - ( u21km1*u21km1 + u31km1*u31km1 + u41km1*u41km1 ) )
  378. + (1.0/6.0)
  379. * tz3 * ( u41k*u41k - u41km1*u41km1 )
  380. + c1 * c5 * tz3 * ( u51k - u51km1 );
  381. }
  382. for (k=2; k<=nz-1; k++)
  383. for (j=jst; j<=jend; j++)
  384. for (i=ist; i<=iend; i++) {
  385. frct(1,i,j,k) = frct(1,i,j,k)
  386. + dz1 * tz1 * ( rsd(1,i,j,k+1)
  387. - 2.0 * rsd(1,i,j,k)
  388. + rsd(1,i,j,k-1) );
  389. frct(2,i,j,k) = frct(2,i,j,k)
  390. + tz3 * c3 * c4 * ( flux(2,i,j,k+1) - flux(2,i,j,k) )
  391. + dz2 * tz1 * ( rsd(2,i,j,k+1)
  392. - 2.0 * rsd(2,i,j,k)
  393. + rsd(2,i,j,k-1) );
  394. frct(3,i,j,k) = frct(3,i,j,k)
  395. + tz3 * c3 * c4 * ( flux(3,i,j,k+1) - flux(3,i,j,k) )
  396. + dz3 * tz1 * ( rsd(3,i,j,k+1)
  397. - 2.0 * rsd(3,i,j,k)
  398. + rsd(3,i,j,k-1) );
  399. frct(4,i,j,k) = frct(4,i,j,k)
  400. + tz3 * c3 * c4 * ( flux(4,i,j,k+1) - flux(4,i,j,k) )
  401. + dz4 * tz1 * ( rsd(4,i,j,k+1)
  402. - 2.0 * rsd(4,i,j,k)
  403. + rsd(4,i,j,k-1) );
  404. frct(5,i,j,k) = frct(5,i,j,k)
  405. + tz3 * c3 * c4 * ( flux(5,i,j,k+1) - flux(5,i,j,k) )
  406. + dz5 * tz1 * ( rsd(5,i,j,k+1)
  407. - 2.0 * rsd(5,i,j,k)
  408. + rsd(5,i,j,k-1) );
  409. }
  410. //c---------------------------------------------------------------------
  411. //c fourth-order dissipation
  412. //c---------------------------------------------------------------------
  413. for (j=jst; j<=jend; j++)
  414. for (i=ist; i<=iend; i++)
  415. for (m=1; m<=5; m++) {
  416. frct(m,i,j,2) = frct(m,i,j,2)
  417. - dsspm * ( + 5.0 * rsd(m,i,j,2)
  418. - 4.0 * rsd(m,i,j,3)
  419. + rsd(m,i,j,4) );
  420. frct(m,i,j,3) = frct(m,i,j,3)
  421. - dsspm * (- 4.0 * rsd(m,i,j,2)
  422. + 6.0 * rsd(m,i,j,3)
  423. - 4.0 * rsd(m,i,j,4)
  424. + rsd(m,i,j,5) );
  425. }
  426. for (k=4; k<=nz-3; k++)
  427. for (j=jst; j<=jend; j++)
  428. for (i=ist; i<=iend; i++)
  429. for (m=1; m<=5; m++)
  430. frct(m,i,j,k) = frct(m,i,j,k)
  431. - dsspm * ( rsd(m,i,j,k-2)
  432. - 4.0 * rsd(m,i,j,k-1)
  433. + 6.0 * rsd(m,i,j,k)
  434. - 4.0 * rsd(m,i,j,k+1)
  435. + rsd(m,i,j,k+2) );
  436. for (j=jst; j<=jend; j++)
  437. for (i=ist; i<=iend; i++)
  438. for (m=1; m<=5; m++) {
  439. frct(m,i,j,nz-2) = frct(m,i,j,nz-2)
  440. - dsspm * ( rsd(m,i,j,nz-4)
  441. - 4.0 * rsd(m,i,j,nz-3)
  442. + 6.0 * rsd(m,i,j,nz-2)
  443. - 4.0 * rsd(m,i,j,nz-1) );
  444. frct(m,i,j,nz-1) = frct(m,i,j,nz-1)
  445. - dsspm * ( rsd(m,i,j,nz-3)
  446. - 4.0 * rsd(m,i,j,nz-2)
  447. + 5.0 * rsd(m,i,j,nz-1) );
  448. }
  449. return;
  450. }