Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 118.50 KB | None | 0 0
  1. !##############################################################
  2. PROGRAM PCOL
  3. !##############################################################
  4. ! AUTHOR: A. BADARUDIN, UM, 2011.
  5. !
  6. ! TECH LOG:
  7. ! 14/07/11 - Inlet, Outlet.
  8. ! search 'INLET','OUTLET','PROFILE'.
  9. ! 15/07/11 - Grid stretching 'STRETCH', profile 'PROFILE'.
  10. ! 17/07/11 - LUD 'LUD'.
  11. ! 14/08/11 - Temp Eqn 'T'.
  12. ! KOMEGA - H:\UMResearch\simple_structured\YinJen\YJLee_
  13. ! 06062011\sduct_stretchedgrid\3d_simple_nonortho_duct_turb
  14. ! 17/06/16 - Bypassing a block of cells. 'BLK'.
  15. ! 02/08/16 - Input file for students 'STUDIN', no need to
  16. ! open source file for input.
  17. ! 22/06/16 - k-epsilon turbulence model. 'TURB'
  18. ! 15/03/16 - No MPI (serial).
  19. ! 19/03/16 - LUD update 'LUD'.
  20. !
  21. ! TESTED: //, CAD/M Server. See cgbpar.out,cgbpar.xls
  22. ! TESTER:
  23. ! COMPILE AND LINK:
  24. ! gfortran -o cgbpar cgbpar.f90 global.f90
  25. !
  26. ! BLK:
  27. !##############################################################
  28. ! PROGRAM PCOL
  29. !##############################################################
  30. ! TNIBK=2
  31. ! NIMBK=TNIBK+1
  32. ! XBK2X(1)=1
  33. ! XBK2X(2)=5
  34. ! XBK2X)NIMBK)=NIM
  35. ! BLK:
  36. ! DO IBK=1,NIMBK
  37. ! XBK(1)=X(XBK2X(1))
  38. ! END DO
  39. ! BLK:
  40. ! DO KBK=1,NKMBK
  41. ! DO IBK=1,NIMBK
  42. ! DO JBK=1,NJMBK
  43. ! IJKBK=(KBK-1)*NIJBK+(IBK-1)*NJBK+J-1
  44. ! BKFLG(IJKBK)=.TRUE.
  45. ! END DO
  46. ! END DO
  47. ! END DO
  48. ! BKFLG(0)=.FALSE.
  49. ! BLK:
  50. !###########################################################
  51. ! SUBROUTINE CALCUVW
  52. !###########################################################
  53. ! DO KBK=1,NKMBK
  54. ! DO IBK=1,NIMBK
  55. ! DO JBK=1,NJMBK
  56. ! IJKBK=(KBK-1)*NIJBK+(IBK-1)*NJBK+J-1
  57. ! IF (BKFLG(IJKBK).EQ.TRUE) THEN
  58. ! DO K=BZS(IJKBK),BZE(IJKBK)
  59. ! DZ=Z(K)-Z(K-1)
  60. ! DO I=BIS(IJKBK),BIE(IJKBK)
  61. ! DX=X(I)-X(I-1)
  62. ! DO J=BYS(IJKBK),BYE(IJKBK)
  63. ! DY=Y(J)-Y(J-1)
  64. ! IJK=LK(K)+LI(I)+J
  65. !
  66. !.....CELL-FACE PRESSURE, CELL-CENTER GRADIENT, SOURCE
  67. ! 3D
  68. ! IF (IBK.LT.NIMBK) THEN
  69. ! IF (BKFLG(IJKBK+TNIBK).EQ..FALSE..AND.&
  70. ! &I.EQ.BIE(IJKBK)) THEN
  71. ! IK=(K-1)*NI+I
  72. ! PE=PEBK(IBK,IK)!PW=PWBK(IBK,IK) FOR WEST BNDY PRESS.
  73. ! ELSE
  74. ! PE=P(IJK+NJ)*FX(I)+P(IJK)*(1.-FX(I))
  75. ! END IF
  76. ! ELSE
  77. ! PE=P(IJK+NJ)*FX(I)+P(IJK)*(1.-FX(I))
  78. ! END IF
  79. ! END DO
  80. ! END DO
  81. ! END DO
  82. ! END IF
  83. ! END DO
  84. ! END DO
  85. ! END DO
  86. ! BLK:
  87. !#############################################################
  88. ! SUBROUTINE PBOUND(FI,FIS1,FIB2)
  89. !#############################################################
  90. ! DO KBK=1,NKMBK
  91. ! DO IBK=1,NIMBK
  92. ! DO JBK=1,NJMBK
  93. ! IJKBK=(KBK-1)*NIJBK+(IBK-1)*NJBK+J-1
  94. ! IF (BKFLG(IJKBK).EQ.TRUE) THEN
  95. ! DO K=BZS(IJKBK),BZE(IJKBK)
  96. ! DO I=BIS(IJKBK),BIE(IJKBK)
  97. ! IF (IBK.LT.NIMBK) THEN
  98. ! IF (BKFLG(IJKBK-1).EQ..FALSE...AND.&
  99. ! &I.EQ.BIE(IJKBK)) THEN
  100. ! IK =(K-1)*NI+I
  101. ! IJK=LK(K)+LI(I)+BYS(1)-1
  102. ! FISBK(IBK,IK)=FI(IJK+1)+(FI(IJK+1)-FI(IJK+2))*FY(BYS(1))
  103. ! !FINBK(IBK,IK)=... FOR NORTH BNDY FI
  104. ! ELSE
  105. ! IJK=LK(K)+LI(I)+1
  106. ! FI(IJK)=FI(IJK+1)+(FI(IJK+1)-FI(IJK+2))*FY(2)
  107. ! END IF
  108. ! ELSE
  109. ! IJK=LK(K)+LI(I)+1
  110. ! FI(IJK)=FI(IJK+1)+(FI(IJK+1)-FI(IJK+2))*FY(2)
  111. ! END IF
  112. ! END DO
  113. ! END DO
  114. ! END IF
  115. ! END DO
  116. ! END DO
  117. ! END DO
  118. !
  119. ! EXTEND TO OTHER RELEVANT SUBROUTINES, LOOPS, COORD DIRS ETC
  120. !---------------------------------------------------------------
  121. USE GLOBAL
  122. IMPLICIT NONE
  123. ! MPI
  124. INTEGER :: ITER
  125. DOUBLE PRECISION :: SOURCE
  126. ! TURB
  127. INTEGER :: IFI
  128. DOUBLE PRECISION, ALLOCATABLE, DIMENSION (:) :: FI
  129. ! STRETCH
  130. INTEGER :: ICTR,JCTR,BYS1M1
  131. !--------------------------------------------------------------
  132. !
  133. !.....MPI global comm
  134. !
  135. !
  136. !.....MPI virtual topology
  137. !
  138. !.....I/O FILE NAMES. SUNIT-.res , TUNIT-.out .
  139. ! STUDIN
  140. FILIN='cgbpar.inp'
  141. OPEN (UNIT=5,FILE=FILIN)
  142. REWIND 5
  143. ! SYNTMON
  144. SUNIT=3
  145. TUNIT=2
  146. ! PLOT3D
  147. JUNIT=31
  148. KUNIT=51
  149. !
  150. !-----------------------------------------------------------
  151. !.....READ INPUT DATA FROM UNIT 5
  152. !-----------------------------------------------------------
  153. ! STUDIN
  154. ! TURB
  155. READ(5,6) TITLE
  156. 6 FORMAT(A80)
  157. READ(5,*) LREAD,LWRITE,LLUD
  158. READ(5,*) MAXIT,IMON,JMON,KMON
  159. READ(5,*) IPR,JPR,KPR,SORMAX,SLARGE
  160. READ(5,*) DENSIT,VISC,PRM
  161. READ(5,*) TH,TC
  162. READ(5,*) UIN,VIN,WIN,PIN,TIN
  163. READ(5,*) TEIN,EDIN,ULID
  164. READ(5,*) (LCAL(I),I=1,NPHI)
  165. READ(5,*) (URF(I),I=1,NPHI)
  166. READ(5,*) (SOR(I),I=1,NPHI)
  167. READ(5,*) (NSW(I),I=1,NPHI)
  168. READ(5,*) (GDS(I),I=1,NPHI)
  169. READ(5,*) NI,NJ,NK
  170. READ(5,*) XMIN,YMIN,ZMIN
  171. READ(5,*) XMAX,YMAX,ZMAX
  172. READ(5,*) BYS1,BZE1
  173. READ(5,*) DFAC
  174. ! NANO
  175. ! CPN is the specific heat at constant pressure for base fluid
  176. ! (kJ/kgK). CPS is the specific heat at constant pressure for
  177. ! solid nanoparticles (kJ/kgK). DENS is the desity of solid
  178. ! nanoparticles (kg/m^3). PHIS is the volume fraction of solid
  179. ! nanoparticles (nondimensional).
  180. !
  181. READ(5,*) CPN,CPS,DENS,PHIS
  182. ! NANO
  183. ! FK is the thermal conductivity of fluid (W/mK). SK is the
  184. ! thermal conductivity of solid nanoparticles (W/mK).
  185. !
  186. READ(5,*) FK,SKN
  187. ! STUDIN
  188. PRINT *,'TITLE:',TITLE
  189. PRINT *,'LREAD,LWRITE,LLUD:',LREAD,LWRITE,LLUD
  190. PRINT *,'MAXIT,IMON,JMON,KMON:',MAXIT,IMON,JMON,KMON
  191. PRINT *,'IPR,JPR,KPR,SORMAX,SLARGE:',IPR,JPR,KPR,SORMAX,SLARGE
  192. PRINT *,'DENSIT,VISC,PRM:',DENSIT,VISC,PRM
  193. PRINT *,'TH,TC:',TH,TC
  194. PRINT *,'UIN,VIN,WIN,PIN,TIN:',UIN,VIN,WIN
  195. PRINT *,'PIN,TIN:',PIN,TIN
  196. PRINT *,'TEIN,EDIN,ULID:',TEIN,EDIN,ULID
  197. PRINT *,'(LCAL(I),I=1,4):',(LCAL(I),I=1,4)
  198. PRINT *,'(LCAL(I),I=5,NPHI):',(LCAL(I),I=5,NPHI)
  199. PRINT *,'(URF(I),I=1,4):',(URF(I),I=1,4)
  200. PRINT *,'(URF(I),I=5,NPHI):',(URF(I),I=5,NPHI)
  201. PRINT *,'(SOR(I),I=1,4):',(SOR(I),I=1,4)
  202. PRINT *,'(SOR(I),I=5,NPHI):',(SOR(I),I=5,NPHI)
  203. PRINT *,'(NSW(I),I=1,4):',(NSW(I),I=1,4)
  204. PRINT *,'(NSW(I),I=5,NPHI):',(NSW(I),I=5,NPHI)
  205. PRINT *,'(GDS(I),I=1,4):',(GDS(I),I=1,4)
  206. PRINT *,'(GDS(I),I=5,NPHI):',(GDS(I),I=5,NPHI)
  207. PRINT *,'NI,NJ,NK:',NI,NJ,NK
  208. PRINT *,'XMIN,YMIN,ZMIN:',XMIN,YMIN,ZMIN
  209. PRINT *,'XMAX,YMAX,ZMAX:',XMAX,YMAX,ZMAX
  210. PRINT *,'BYS1,BZE1:',BYS1,BZE1
  211. PRINT *,'DFAC:',DFAC
  212. PRINT *
  213. !
  214. !.....INPUT AND BOUNDARY DATA, INITIALIZATION, OUTPUT TITLE,
  215. ! ETC.
  216. !
  217. ! If LREAD is set true, results from previous run are read
  218. ! before starting computation; if LWRITE is set true, the
  219. ! results of calculation are written onto a file for post-
  220. ! processing or continuation in a later run; if LLUD is set
  221. ! true, 2nd order upwind scheme is activated when GDS(IU)
  222. ! is greater than SMALL.
  223. ! STUDIN
  224. ! LREAD=.FALSE.
  225. ! LWRITE=.TRUE.
  226. ! LLUD=.FALSE.
  227. !
  228. !.....SET SOME CONTROL VARIABLES
  229. !
  230. ! MAXIT is the maximum number of outer iterations to be performed
  231. ! (e.g. one can run 10 outer iterations with LTEST=TRUE to check
  232. ! if everything is OK, then resume calculation with LTEST=FALSE);
  233. ! IMON and JMON are the I and J index of the monitoring location
  234. ! (variable values at this location are printed after every outer
  235. ! iteration); IPR and JPR are the I and J index of the node at
  236. ! which the pressure is kept fixed (usually zero; reference
  237. ! location); SORMAX is the level of the residual norm at which
  238. ! outer iterations are stoped (converged solution); SLARGE is the
  239. ! level of the residual norm at which iterations are stoped because
  240. ! of divergence;
  241. ! STUDIN
  242. ! MAXIT=3000
  243. ! IMON=2
  244. ! JMON=2
  245. ! KMON=2
  246. ! IPR=2
  247. ! JPR=2
  248. ! KPR=2
  249. ! SORMAX=1.E-3
  250. ! SLARGE=1.E3
  251. !
  252. ! DENSIT is the fluid density (here assumed constant); VISC is
  253. ! the fluid dynamic viscosity (here assumed constant); PRANL is
  254. ! the fluid Prandtl number; TH, TC, are the hot wall, cold wall
  255. ! temperature, respectively (Degrees Celcius).
  256. ! STUDIN
  257. ! DENSIT=100.
  258. ! TURB
  259. ! VISC=1.E-3
  260. ! TURB - CHANGE TO PRANL
  261. PRANL=PRM
  262. PRR=1./PRANL
  263. ! T
  264. ! STUDIN
  265. ! TH=100.
  266. ! TC=0.
  267. !
  268. ! UIN, VIN, PIN, and TIN are the values of U, V, P, and T used
  269. ! to initialize fields (usually zero, or some mean values);
  270. ! ULID is the lid velocity for the lid-driven flow;
  271. ! STUDIN
  272. ! UIN=0.
  273. ! VIN=0.
  274. ! WIN=0.
  275. ! PIN=0.
  276. ! TIN=0.
  277. ! TURB
  278. ! TEIN=1.E-5
  279. ! EDIN=1.E-7
  280. ! TURB
  281. ! ULID=1.0
  282. ! T
  283. IU=1
  284. IV=2
  285. IW=3
  286. IP=4
  287. IEN=5
  288. ! TURB
  289. CALL MODDAT
  290. ZERO=0.
  291. !
  292. !.....FLUID,SOLID,NANOFLUID PARAMETERS.
  293. ! NANO
  294. ! DNA1 IS RATIO OF DYNAMIC VISCOSITY OF NANOFLUID
  295. ! COMPARED TO BASE FLUID.
  296. ! DNA2 IS RATIO OF DENSITY OF NANOFLUID COMPARED TO
  297. ! BASE FLUID.
  298. ! DNA3 IS RATIO OF PRANDTL NUMBER OF NANOFLUID
  299. ! COMPARED TO BASE FLUID.
  300. ! RATK IS RATIO OF CONDUCTIVITY OF NANOFLUID COMPARED
  301. ! TO BASE FLUID.
  302. !
  303. DNA2=(1.-PHIS)*DENSIT+PHIS*DENS
  304. RATK=(SKN+2.*FK-2.*PHIS*(FK-SKN))/(SKN+2.*FK+PHIS*(FK-SKN))
  305. DNA3=(1.-PHIS)+PHIS*((DENS*CPS)/(DENSIT*CPN))
  306. DNA3=RATK/DNA3
  307. !
  308. ! LCAL(I) defines which equations are to be solved (I defines
  309. ! variable as follows: 1 -> U, 2 -> V, 3 -> W, 4 -> P',
  310. ! 5 -> T).
  311. ! STUDIN
  312. ! LCAL(IU)=.TRUE.
  313. ! LCAL(IV)=.TRUE.
  314. ! LCAL(IW)=.TRUE.
  315. ! LCAL(IP)=.TRUE.
  316. ! LCAL(IEN)=.FALSE.
  317. ! LCAL(ITE)=.TRUE.
  318. ! LCAL(IED)=.TRUE.
  319. ! LCAL(IVIS)=.TRUE.
  320. !
  321. ! URF(I) is the under-relaxation factor for the Ith variable.
  322. ! STUDIN
  323. ! URF(IU)=0.1
  324. ! URF(IV)=0.1
  325. ! URF(IW)=0.1
  326. ! URF(IP)=0.025
  327. ! URF(IEN)=0.1
  328. ! URF(ITE)=0.1!0.7
  329. ! URF(IED)=0.05!0.1!0.7
  330. ! URF(IVIS)=1.
  331. !
  332. ! SOR(I) is the required ratio of reduction of the residual norm
  333. ! during inner iterations for Ith variable before they are stopped
  334. ! (e.g. value 0.2 means the residual norm should be reduced by a
  335. ! factor of 5; this is usually sufficient for inner iterations
  336. ! before updating the matrix).
  337. ! STUDIN
  338. ! SOR(IU)=0.2
  339. ! SOR(IV)=0.2
  340. ! SOR(IW)=0.2
  341. ! SOR(IP)=0.2
  342. ! SOR(IEN)=0.2
  343. ! SOR(ITE)=0.01
  344. ! SOR(IED)=0.01
  345. ! SOR(IVIS)=0.
  346. !
  347. ! NSW(I) is the maximum allowed number of inner iterations for the
  348. ! Ith variable (for U, V, and T, one inner iteration by SIP is
  349. ! sufficiant; for P', 5 to 10 may be required to satisfy the
  350. ! convergencee criterion).
  351. ! STUDIN
  352. ! NSW(IU)=5
  353. ! NSW(IV)=5
  354. ! NSW(IW)=5
  355. ! NSW(IP)=20
  356. ! NSW(IEN)=5
  357. ! NSW(ITE)=100
  358. ! NSW(IED)=100!10
  359. ! NSW(IVIS)=0
  360. !
  361. ! GDS(I) is the blending factor for UDS and CDS in the equation for
  362. ! Ith variable (convective terms; value 1.0 means CDS (second
  363. ! order), 0.0 means UDS (first order), any value between 0.0 and
  364. ! 1.0 can be used). The value 1.0 is recomended, except for coarse
  365. ! grids, in case convergence problems are encountered.
  366. ! STUDIN
  367. ! GDS(IU)=0.
  368. ! GDS(IV)=0.
  369. ! GDS(IW)=0.
  370. ! GDS(IP)=0.
  371. ! GDS(IEN)=0.
  372. ! GDS(ITE)=0.
  373. ! GDS(IED)=0.
  374. ! GDS(IVIS)=0.
  375. ! OUTLET
  376. SMALL=1.E-30
  377. !
  378. !.....READ GRID DATA
  379. ! BLK
  380. ! STUDIN
  381. ! NI=22
  382. ! NJ=22
  383. ! NK=602
  384. NIJ=NI*NJ
  385. NIK=NI*NK
  386. !
  387. ALLOCATE (LI(1:NI))
  388. ALLOCATE (LK(1:NK))
  389. !
  390. DO I=1,NI
  391. LI(I)=(I-1)*NJ
  392. END DO
  393. DO K=1,NK
  394. LK(K)=(K-1)*NIJ
  395. END DO
  396. !
  397. NIM=NI-1
  398. NJM=NJ-1
  399. NKM=NK-1
  400. NIJK=NI*NJ*NK
  401. !
  402. ALLOCATE (X(1:NI),XC(1:NI))
  403. ALLOCATE (Y(1:NJ),YC(1:NJ))
  404. ALLOCATE (Z(1:NK),ZC(1:NK))
  405. !
  406. !.....Memory allocation
  407. !
  408. X=0.
  409. ! STUDIN
  410. ! XMIN=0.
  411. ! XMAX=0.02
  412. ! 3D
  413. Y=0.
  414. ! STUDIN
  415. ! YMIN=0.
  416. ! YMAX=0.02
  417. ! 3D
  418. ! BLK
  419. Z=0.
  420. ! STUDIN
  421. ! ZMIN=0.
  422. ! ZMAX=0.6
  423. ! STUDIN
  424. ! STRETCH
  425. ! DFAC=1.2
  426. ! PLOT3D
  427. MACH=REAL(ULID/343.2)
  428. ALPHA=REAL(0.)
  429. REYNOLDS=REAL(DENSIT*ULID*(YMAX-YMIN)/VISC)
  430. TIME=REAL(0.)
  431. !
  432. !.....GRID GENERATION - XDIR. SEE CFD WIKI FOR MORE DETAILS.
  433. ! SEE http://www.cfd-online.com/Wiki/Structured_mesh_generation
  434. ! STRETCH
  435. X(1)=0.
  436. ! STRETCH
  437. DX=1./DBLE((NI-2)/2)
  438. DO I=2,(NI-2)/2+1,1
  439. X(I)=X(I-1)+DX
  440. END DO
  441. ! STRETCH
  442. DO I=2,(NI-2)/2+1,1
  443. X(I)=1.+(TANH(DFAC*(X(I)-1.)/2.))/(TANH(DFAC/2.))
  444. END DO
  445. ! STRETCH
  446. DO I=2,(NI-2)/2+1,1
  447. X(I)=X(I)*((XMAX-XMIN)/2.)+XMIN
  448. END DO
  449. ! STRETCH
  450. X(NIM)=XMAX
  451. ! STRETCH
  452. ICTR=2
  453. X(1)=XMIN
  454. DO I=NIM-1,NI/2+1,-1
  455. X(I)=X(I+1)-(X(ICTR)-X(ICTR-1))
  456. ICTR=ICTR+1
  457. END DO
  458. ! STRETCH
  459. X(1)=XMIN
  460. X(NI)=X(NIM)
  461. !
  462. !.....GRID GENERATION - YDIR BLK 2.
  463. ! SEE http://www.cfd-online.com/Wiki/Structured_mesh_generation
  464. ! STRETCH
  465. BYS1M1=BYS1-1
  466. Y(1)=0.
  467. ! STRETCH
  468. DY=1./DBLE((BYS1M1-1)/2)
  469. DO J=2,(BYS1M1-1)/2+1,1
  470. Y(J)=Y(J-1)+DY
  471. END DO
  472. ! STRETCH
  473. DO J=2,(BYS1M1-1)/2+1,1
  474. Y(J)=1.+(TANH(DFAC*(Y(J)-1.)/2.))/(TANH(DFAC/2.))
  475. END DO
  476. ! STRETCH
  477. Y(BYS1M1)=YMIN+(YMAX-YMIN)*((DBLE(BYS1M1)-1.)/(DBLE(NJ)-2.))
  478. DO J=2,(BYS1M1-1)/2+1,1
  479. Y(J)=Y(J)*((Y(BYS1M1)-YMIN)/2.)+YMIN
  480. END DO
  481. ! STRETCH
  482. JCTR=2
  483. Y(1)=YMIN
  484. DO J=BYS1M1-1,(BYS1M1+1)/2+1,-1
  485. Y(J)=Y(J+1)-(Y(JCTR)-Y(JCTR-1))
  486. JCTR=JCTR+1
  487. END DO
  488. ! STRETCH
  489. Y(1)=YMIN
  490. !
  491. !.....GRID GENERATION - YDIR BLKS 1 AND 3.
  492. ! SEE http://www.cfd-online.com/Wiki/Structured_mesh_generation
  493. ! STRETCH
  494. Y(BYS1M1)=0.
  495. ! STRETCH
  496. DY=1./DBLE((NJ-BYS1M1-1)/2)
  497. DO J=BYS1M1+1,BYS1M1+((NJ-BYS1M1-1)/2),1
  498. Y(J)=Y(J-1)+DY
  499. END DO
  500. ! STRETCH
  501. DO J=BYS1M1+1,BYS1M1+((NJ-BYS1M1-1)/2),1
  502. Y(J)=1.+(TANH(DFAC*(Y(J)-1.)/2.))/(TANH(DFAC/2.))
  503. END DO
  504. ! STRETCH
  505. Y(BYS1M1)=YMIN+(YMAX-YMIN)*((DBLE(BYS1M1)-1.)/(DBLE(NJ)-2.))
  506. DO J=BYS1M1+1,BYS1M1+((NJ-BYS1M1-1)/2),1
  507. Y(J)=Y(J)*((YMAX-Y(BYS1M1))/2.)+Y(BYS1M1)
  508. END DO
  509. ! STRETCH
  510. Y(NJM)=YMAX
  511. ! STRETCH
  512. JCTR=BYS1
  513. Y(BYS1M1)=YMIN+(YMAX-YMIN)*((DBLE(BYS1M1)-1.)/(DBLE(NJ)-2.))
  514. DO J=NJM-1,BYS1M1+((NJ-BYS1M1-1)/2)+1,-1
  515. Y(J)=Y(J+1)-(Y(JCTR)-Y(JCTR-1))
  516. JCTR=JCTR+1
  517. END DO
  518. ! STRETCH
  519. Y(NJ)=Y(NJM)
  520. !
  521. ! Y(1)=YMIN
  522. ! DY=(YMAX-YMIN)/DBLE(NJ-2)
  523. ! DO J=2,NJM,1
  524. ! Y(J)=Y(J-1)+DY
  525. ! END DO
  526. ! Y(NJ)=Y(NJM)
  527. !
  528. ! PRINT *
  529. ! DO J=1,NJ,1
  530. ! PRINT *,'J,Y(J):',J,Y(J)
  531. ! END DO
  532. ! PRINT *
  533. !
  534. !.....GRID GENERATION - ZDIR BLKS 2 AND 3.
  535. ! SEE http://www.cfd-online.com/Wiki/Structured_mesh_generation
  536. ! STRETCH
  537. Z(BZE1)=0.
  538. ! STRETCH
  539. DZ=1./DBLE(NK-BZE1-1)
  540. DO K=BZE1+1,BZE1+(NK-BZE1-1),1
  541. Z(K)=Z(K-1)+DZ
  542. END DO
  543. ! STRETCH
  544. DO K=BZE1+1,BZE1+(NK-BZE1-1),1
  545. Z(K)=1.+(TANH(DFAC*(Z(K)-1.)/2.))/(TANH(DFAC/2.))
  546. END DO
  547. !
  548. Z(BZE1)=ZMIN+(ZMAX-ZMIN)*((DBLE(BZE1)-1.)/(DBLE(NK)-2.))
  549. DO K=BZE1+1,BZE1+(NK-BZE1-1),1
  550. Z(K)=Z(K)*(ZMAX-Z(BZE1))+Z(BZE1)
  551. END DO
  552. !
  553. DZ=(ZMAX-ZMIN)/DBLE(NK-2)
  554. DO K=BZE1+1,BZE1+(NK-BZE1-1),1
  555. Z(K)=Z(K-1)+DZ
  556. END DO
  557. !
  558. Z(NKM)=ZMAX
  559. Z(NK) =ZMAX
  560. !
  561. !.....GRID GENERATION - ZDIR BLK 1.
  562. ! SEE http://www.cfd-online.com/Wiki/Structured_mesh_generation
  563. ! STRETCH
  564. Z(1)=1.
  565. ! STRETCH
  566. DZ=1./DBLE(BZE1-1)
  567. DO K=2,BZE1,1
  568. Z(K)=Z(K-1)-DZ
  569. END DO
  570. ! STRETCH
  571. DO K=2,BZE1,1
  572. Z(K)=ABS((TANH(DFAC*(Z(K)-1.)/2.))/(TANH(DFAC/2.)))
  573. END DO
  574. ! STRETCH
  575. Z(BZE1)=ZMIN+(ZMAX-ZMIN)*((DBLE(BZE1)-1.)/(DBLE(NK)-2.))
  576. DO K=2,BZE1-1,1
  577. Z(K)=Z(K)*(Z(BZE1)-ZMIN)+ZMIN
  578. END DO
  579. ! STRETCH
  580. Z(1)=ZMIN
  581. !
  582. !.....X- COORDINATES OF CV-CENTERS
  583. !
  584. XC=0.
  585. DO I=2,NIM
  586. XC(I)=0.5*(X(I)+X(I-1))
  587. END DO
  588. XC(1)=X(1)
  589. XC(NI)=X(NIM)
  590. !
  591. !.....Y- COORDINATES OF CV-CENTERS
  592. !
  593. YC=0.
  594. DO J=2,NJM
  595. YC(J)=0.5*(Y(J)+Y(J-1))
  596. END DO
  597. YC(1)=Y(1)
  598. YC(NJ)=Y(NJM)
  599. !
  600. !.....Z- COORDINATES OF CV-CENTERS
  601. ! 3D
  602. ZC=0.
  603. DO K=2,NKM
  604. ZC(K)=0.5*(Z(K)+Z(K-1))
  605. END DO
  606. ZC(1)=Z(1)
  607. ZC(NK)=Z(NKM)
  608. !
  609. !.....INTERPOLATION FACTORS (see Sect. 4.4.2, Eq. (4.14))
  610. ! 3D
  611. ALLOCATE (FX(1:NIM))
  612. ALLOCATE (FY(1:NJM))
  613. ALLOCATE (FZ(1:NKM))
  614. !
  615. FX=0.
  616. DO I=1,NIM
  617. FX(I)=(X(I)-XC(I))/(XC(I+1)-XC(I))
  618. END DO
  619. !
  620. FY=0.
  621. DO J=1,NJM
  622. FY(J)=(Y(J)-YC(J))/(YC(J+1)-YC(J))
  623. END DO
  624. ! 3D
  625. FZ=0.
  626. DO K=1,NKM
  627. FZ(K)=(Z(K)-ZC(K))/(ZC(K+1)-ZC(K))
  628. END DO
  629. !
  630. !---------------------------------------------------
  631. !.....BOUNDARY AND INITIAL CONDITIONS
  632. !---------------------------------------------------
  633. !
  634. !.....NORTH WALL VELOCITY (FOR LID-DRIVEN CAVITY)
  635. ! 3D
  636. ! T
  637. ALLOCATE (U(1:NIJK))
  638. ALLOCATE (V(1:NIJK))
  639. ALLOCATE (W(1:NIJK))
  640. ALLOCATE (UO(1:NIJK))
  641. ALLOCATE (VO(1:NIJK))
  642. ALLOCATE (WO(1:NIJK))
  643. ALLOCATE (SU(1:NIJK))
  644. ALLOCATE (SV(1:NIJK))
  645. ALLOCATE (SW(1:NIJK))
  646. ALLOCATE (P(1:NIJK))
  647. ALLOCATE (PP(1:NIJK))
  648. ALLOCATE (PO(1:NIJK))
  649. ALLOCATE (F1(1:NIJK))
  650. ALLOCATE (F2(1:NIJK))
  651. ALLOCATE (F3(1:NIJK))
  652. ALLOCATE (DPX(1:NIJK))
  653. ALLOCATE (DPY(1:NIJK))
  654. ALLOCATE (DPZ(1:NIJK))
  655. ALLOCATE (AE(1:NIJK))
  656. ALLOCATE (AW(1:NIJK))
  657. ALLOCATE (AN(1:NIJK))
  658. ALLOCATE (AS(1:NIJK))
  659. ALLOCATE (AT(1:NIJK))
  660. ALLOCATE (AB(1:NIJK))
  661. ALLOCATE (AP(1:NIJK))
  662. ALLOCATE (APU(1:NIJK))
  663. ALLOCATE (APV(1:NIJK))
  664. ALLOCATE (APW(1:NIJK))
  665. ALLOCATE (T(1:NIJK))
  666. ALLOCATE (TO(1:NIJK))
  667. ! TURB
  668. ALLOCATE (ED(1:NIJK))
  669. ALLOCATE (GEN(1:NIJK))
  670. ALLOCATE (TE(1:NIJK))
  671. ALLOCATE (VIS(1:NIJK))
  672. ALLOCATE (VISW(1:NIJK))
  673. ALLOCATE (VOL(1:NIJK))
  674. ALLOCATE (YPL(1:NIJK))
  675. !
  676. !.....LOCAL VARS
  677. ! TURB
  678. ALLOCATE (FI(1:NIJK))
  679. !
  680. !.....ZERO OUT ALL THE ABOVE
  681. !
  682. U=0.;V=0.;W=0.
  683. UO=0.;VO=0.;WO=0.
  684. SU=0.;SV=0.;SW=0.
  685. P=0.;PP=0.;PO=0.
  686. F1=0.;F2=0.;F3=0.
  687. DPX=0.;DPY=0.;DPZ=0.
  688. AE=0.;AW=0.;AN=0.;AS=0.;AT=0.;AB=0.;AP=0.
  689. APU=0.;APV=0.;APW=0.
  690. T=0.;TO=0.
  691. ! TURB
  692. ED=0.
  693. GEN=0.
  694. TE=0.
  695. VIS=0.
  696. VISW=0.
  697. VOL=0.
  698. YPL=0.
  699. !
  700. !.....INITIALIZE LOCAL VARS
  701. ! TURB
  702. FI=0.
  703. !
  704. !.....BLK
  705. ! BLK
  706. ALLOCATE (BYS(0:3))
  707. ALLOCATE (BYE(0:3))
  708. ALLOCATE (BZS(0:3))
  709. ALLOCATE (BZE(0:3))
  710. ! BLK
  711. ALLOCATE (US1(1:NIK))
  712. ALLOCATE (VS1(1:NIK))
  713. ALLOCATE (WS1(1:NIK))
  714. ALLOCATE (PS1(1:NIK))
  715. ALLOCATE (PPS1(1:NIK))
  716. ALLOCATE (TS1(1:NIK))
  717. ! BLK
  718. ALLOCATE (UB2(1:NIJ))
  719. ALLOCATE (VB2(1:NIJ))
  720. ALLOCATE (WB2(1:NIJ))
  721. ALLOCATE (PB2(1:NIJ))
  722. ALLOCATE (PPB2(1:NIJ))
  723. ALLOCATE (TB2(1:NIJ))
  724. ! BLK
  725. BYS=0;BYE=0;BZS=0;BZE=0
  726. ! BLK
  727. US1=0.;VS1=0.;WS1=0.;PS1=0.;PPS1=0.;TS1=0.
  728. UB2=0.;VB2=0.;WB2=0.;PB2=0.;PPB2=0.;TB2=0.
  729. !
  730. !.....INLET OUTLET
  731. ! OUTLET
  732. ALLOCATE (FMO(1:NIJ))
  733. ALLOCATE (FMI(1:NIJ))
  734. ! OUTLET
  735. FMO=0.
  736. FMI=0.
  737. !
  738. !.....BLK
  739. ! BLK
  740. ! STUDIN
  741. ! BYS(1)=6; BYE(1)=NJM
  742. BYS(1)=BYS1; BYE(1)=NJM
  743. BYS(2)=2; BYE(2)=BYS(1)-1
  744. BYS(3)=BYE(2)+1;BYE(3)=NJM
  745. ! BZS(1)=2; BZE(1)=201
  746. BZS(1)=2; BZE(1)=BZE1
  747. BZS(2)=BZE(1)+1;BZE(2)=NKM
  748. BZS(3)=BZS(2); BZE(3)=NKM
  749. !
  750. !.....INTERNAL CELL VOLUME
  751. ! TURB
  752. ! BLK
  753. DO B=1,3
  754. DO K=BZS(B),BZE(B)
  755. DZ=Z(K)-Z(K-1)
  756. DO I=2,NIM
  757. DX=X(I)-X(I-1)
  758. DO J=BYS(B),BYE(B)
  759. DY=Y(J)-Y(J-1)
  760. IJK=LK(K)+LI(I)+J
  761. VOL(IJK)=DX*DY*DZ
  762. END DO
  763. END DO
  764. END DO
  765. END DO
  766. !
  767. !---------------------------------------------------
  768. !.....TEMPERATURE, TE, ED, VIS BOUNDARIES BLK1
  769. !---------------------------------------------------
  770. !
  771. !.....SOUTH BOUNDARY (ISOTHERMAL WALL)
  772. ! BLK1
  773. DO K=2,BZE(1)
  774. DO I=2,NIM
  775. IK =(K-1)*NI+I
  776. IJK=LK(K)+LI(I)+BYS(1)
  777. TS1(IK)=TH!T(IJK-1)=TH
  778. VIS(IJK)=VISC
  779. VISW(IJK)=VIS(IJK)
  780. END DO
  781. END DO
  782. !
  783. !.....NORTH BOUNDARY (ISOTHERMAL WALL)
  784. ! BLK1
  785. ! NANO
  786. DO K=2,BZE(1)!NKM
  787. DO I=2,NIM
  788. IJK=LK(K)+LI(I)+NJM
  789. T(IJK+1)=TH
  790. VIS(IJK)=VISC
  791. VISW(IJK)=VIS(IJK)
  792. END DO
  793. END DO
  794. !
  795. !.....WEST BOUNDARY (ADIABATIC WALL)
  796. !
  797. DO K=BZS(1),BZE(1)
  798. DO J=BYS(1),BYE(1)
  799. IJK=LK(K)+LI(1)+J
  800. VIS(IJK)=VISC
  801. VISW(IJK)=VIS(IJK)
  802. END DO
  803. END DO
  804. !
  805. !.....EAST BOUNDARY (ADIABATIC WALL)
  806. !
  807. DO K=BZS(1),BZE(1)
  808. DO J=BYS(1),BYE(1)
  809. IJK=LK(K)+LI(NI)+J
  810. VIS(IJK)=VISC
  811. VISW(IJK)=VIS(IJK)
  812. END DO
  813. END DO
  814. !
  815. !.....BOTTOM BOUNDARY (ISOTHERMAL INLET)
  816. ! BLK1
  817. ! INLET
  818. ! TURB
  819. ! NANO NO CHANGES
  820. DO I=2,NIM
  821. DO J=BYS(1),NJM
  822. IJK=LK(2)+LI(I)+J
  823. T(IJK-NIJ)=TH
  824. TE(IJK-NIJ)=TEIN
  825. ED(IJK-NIJ)=EDIN
  826. VIS(IJK-NIJ)=VISC
  827. VISW(IJK-NIJ)=VIS(IJK-NIJ)
  828. END DO
  829. END DO
  830. !
  831. !.....TOP IS NOT A BOUNDARY
  832. !
  833. !---------------------------------------------------
  834. !.....TEMPERATURE, TE, ED, VIS BOUNDARIES BLK2
  835. !---------------------------------------------------
  836. ! BLK
  837. !.....SOUTH BOUNDARY (ISOTHERMAL WALL)
  838. !
  839. DO K=BZS(2),NKM
  840. DO I=2,NIM
  841. IJK=LK(K)+LI(I)+2
  842. T(IJK-1)=TC
  843. VIS(IJK)=VISC
  844. VISW(IJK)=VIS(IJK)
  845. END DO
  846. END DO
  847. !
  848. !.....NORTH IS NOT A BOUNDARY
  849. !
  850. !.....WEST BOUNDARY (ADIABATIC WALL)
  851. !
  852. DO K=BZS(2),BZE(2)
  853. DO J=BYS(2),BYE(2)
  854. IJK=LK(K)+LI(1)+J
  855. VIS(IJK)=VISC
  856. VISW(IJK)=VIS(IJK)
  857. END DO
  858. END DO
  859. !
  860. !.....EAST BOUNDARY (ADIABATIC WALL)
  861. !
  862. DO K=BZS(2),BZE(2)
  863. DO J=BYS(2),BYE(2)
  864. IJK=LK(K)+LI(NI)+J
  865. VIS(IJK)=VISC
  866. VISW(IJK)=VIS(IJK)
  867. END DO
  868. END DO
  869. !
  870. !.....BOTTOM BOUNDARY (ISOTHERMAL WALL)
  871. ! WALL
  872. ! BLK
  873. DO I=2,NIM
  874. DO J=2,BYE(2)
  875. IJ =(I-1)*NJ+J
  876. IJK=LK(BZS(2))+LI(I)+J
  877. TB2(IJ)=TC!T(IJK-NIJ)=TC
  878. VIS(IJK)=VISC
  879. VISW(IJK)=VIS(IJK)
  880. END DO
  881. END DO
  882. !
  883. !.....TOP BOUNDARY (OUTLET, SEE SUBROUTINES BCT, CALCSC, MODVIS)
  884. !
  885. DO I=2,NIM
  886. DO J=BYS(2),BYE(2)
  887. IJK=LK(NKM)+LI(I)+J
  888. VIS(IJK+NIJ)=VISC
  889. VISW(IJK+NIJ)=VIS(IJK+NIJ)
  890. END DO
  891. END DO
  892. !
  893. !---------------------------------------------------
  894. !.....TEMPERATURE, TE, ED, VIS BOUNDARIES BLK3
  895. !---------------------------------------------------
  896. ! BLK
  897. !.....SOUTH IS NOT A BOUNDARY
  898. !
  899. !.....NORTH BOUNDARY (ISOTHERMAL WALL)
  900. ! BLK
  901. ! NANO NO CHANGES
  902. DO K=BZS(3),NKM
  903. DO I=2,NIM
  904. IJK=LK(K)+LI(I)+NJM
  905. T(IJK+1)=TH
  906. VIS(IJK)=VISC
  907. VISW(IJK)=VIS(IJK)
  908. END DO
  909. END DO
  910. !
  911. !.....WEST BOUNDARY (ADIABATIC WALLS, SEE SUBROUTINE BCT)
  912. !
  913. DO K=BZS(3),BZE(3)
  914. DO J=BYS(3),BYE(3)
  915. IJK=LK(K)+LI(1)+J
  916. VIS(IJK)=VISC
  917. VISW(IJK)=VIS(IJK)
  918. END DO
  919. END DO
  920. !
  921. !.....EAST BOUNDARY (ADIABATIC WALLS, SEE SUBROUTINE BCT)
  922. !
  923. DO K=BZS(3),BZE(3)
  924. DO J=BYS(3),BYE(3)
  925. IJK=LK(K)+LI(NI)+J
  926. VIS(IJK)=VISC
  927. VISW(IJK)=VIS(IJK)
  928. END DO
  929. END DO
  930. !
  931. !.....BOTTOM IS NOT A BOUNDARY
  932. !
  933. !.....TOP BOUNDARY (OUTLET, SEE SUBROUTINES BCT, CALCSC, MODVIS)
  934. !
  935. DO I=2,NIM
  936. DO J=BYS(3),BYE(3)
  937. IJK=LK(NKM)+LI(I)+J
  938. VIS(IJK+NIJ)=VISC
  939. VISW(IJK+NIJ)=VIS(IJK+NIJ)
  940. END DO
  941. END DO
  942. !
  943. !.....INLET BOUNDARY CONDITIONS
  944. ! INLET
  945. CALL BCIN
  946. !
  947. !.....INITIAL VARIABLE VALUES (INITIAL CONDITIONS)
  948. ! 3D
  949. ! BLK
  950. DO B=1,3
  951. !
  952. DO K=BZS(B),BZE(B)
  953. DO I=2,NIM
  954. DO J=BYS(B),BYE(B)
  955. IJK=LK(K)+LI(I)+J
  956. U(IJK)=UIN
  957. V(IJK)=VIN
  958. W(IJK)=WIN
  959. T(IJK)=TIN
  960. P(IJK)=PIN
  961. ! TURB
  962. TE(IJK)=TEIN
  963. ED(IJK)=EDIN
  964. !
  965. UO(IJK)=UIN
  966. VO(IJK)=VIN
  967. WO(IJK)=WIN
  968. TO(IJK)=TIN
  969. ! INLET
  970. ! TURB
  971. VIS(IJK)=VISC
  972. !
  973. END DO
  974. END DO
  975. END DO
  976. !
  977. END DO
  978. !
  979. !------------------------------------------------------
  980. !.....INITIAL OUTPUT - PRINTOUT OF FLOW PARAMETERS
  981. !------------------------------------------------------
  982. !
  983. OPEN (UNIT=TUNIT,FILE='cgbpar.out',ACCESS='APPEND'&
  984. &,STATUS='NEW')
  985. WRITE(TUNIT,601) 'Flow over a backstep',DENSIT,VISC
  986. 601 FORMAT(1H1,//,10X,A80,/,10X,50('*'),/,10X,&
  987. & ' FLUID DENSITY : ',1P1E10.4,/,10X,&
  988. & ' DYNAMIC VISCOSITY: ',1P1E10.4)
  989. IF(ULID.NE.0.) THEN
  990. WRITE(TUNIT,*) ' MAX. INL VELOCITY: ',ULID
  991. ENDIF
  992. WRITE(TUNIT,*) ' '
  993. WRITE(TUNIT,*) ' UNDERRELAXATION FACTORS'
  994. WRITE(TUNIT,*) ' ========================'
  995. WRITE(TUNIT,*) ' U-VELOCITY : ',URF(IU)
  996. WRITE(TUNIT,*) ' V-VELOCITY : ',URF(IV)
  997. WRITE(TUNIT,*) ' W-VELOCITY : ',URF(IW)
  998. WRITE(TUNIT,*) ' PRESSURE : ',URF(IP)
  999. WRITE(TUNIT,*) ' '
  1000. WRITE(TUNIT,*) ' SPATIAL BLENDING FACTORS &
  1001. &(CDS-UDS)'
  1002. WRITE(TUNIT,*) '&
  1003. & =================================='
  1004. WRITE(TUNIT,*) ' U-VELOCITY : ',GDS(IU)
  1005. WRITE(TUNIT,*) ' V-VELOCITY : ',GDS(IV)
  1006. WRITE(TUNIT,*) ' W-VELOCITY : ',GDS(IW)
  1007. WRITE(TUNIT,*) ' '
  1008. WRITE(TUNIT,*) ' '
  1009. WRITE(TUNIT,*) ' '
  1010. WRITE(TUNIT,*) ' *****************************'
  1011. WRITE(TUNIT,*) ' '
  1012. WRITE(TUNIT,600) IMON,JMON,KMON
  1013. !
  1014. !.....READ RESULTS OF PREVIOUS TIME STEP (IF CONTINUATION)
  1015. ! BLK
  1016. ! T
  1017. ! TURB
  1018. IF (LREAD) THEN
  1019. OPEN (UNIT=SUNIT,FILE='cgbpar.res',STATUS='UNKNOWN',&
  1020. &FORM='UNFORMATTED')
  1021. READ(SUNIT) (U(IJK),IJK=1,NIJK),&
  1022. &(V(IJK),IJK=1,NIJK),&
  1023. &(W(IJK),IJK=1,NIJK),&
  1024. &(P(IJK),IJK=1,NIJK),&
  1025. &(T(IJK),IJK=1,NIJK),&
  1026. &(TE(IJK),IJK=1,NIJK),&
  1027. &(ED(IJK),IJK=1,NIJK),&
  1028. &(VIS(IJK),IJK=1,NIJK),&
  1029. &(F1(IJK),IJK=1,NIJK),&
  1030. &(F2(IJK),IJK=1,NIJK),&
  1031. &(F3(IJK),IJK=1,NIJK)
  1032. CLOSE(SUNIT)
  1033. ENDIF
  1034. !
  1035. !==============================================
  1036. !.....TIME LOOP
  1037. !==============================================
  1038. !
  1039. !.....DEFINE MONITORING LOCATION (NODE WITH I=IMON, J=JMON,
  1040. ! K=KMON)
  1041. !
  1042. IJKMON=LK(KMON)+LI(IMON)+JMON
  1043. !
  1044. !.....SET STARTING ITERTION NUMBER FOR LUD
  1045. ! LUD
  1046. LUST=MAXIT-3
  1047. !
  1048. !+++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1049. !.....OUTER ITERATIONS (SIMPLE RELAXATIONS)
  1050. !+++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1051. !
  1052. DO ITER=1,MAXIT
  1053. ! LUD
  1054. IF (LLUD.AND.GDS(IU).LT.SMALL) THEN
  1055. IF (ITER.GT.LUST) THEN
  1056. LFAC=1.
  1057. ELSE
  1058. LFAC=0.
  1059. END IF
  1060. END IF
  1061. !
  1062. IF(LCAL(IU)) CALL CALCUVW
  1063. !
  1064. IF(LCAL(IP)) CALL CALCP
  1065. ! T
  1066. ! TURB
  1067. IF (LCAL(IEN)) THEN
  1068. FI=T
  1069. IFI=IEN
  1070. CALL CALCSC(FI,IFI)
  1071. T=FI
  1072. END IF
  1073. ! TURB
  1074. IF (LCAL(ITE)) THEN
  1075. FI=TE
  1076. IFI=ITE
  1077. CALL CALCSC(FI,IFI)
  1078. TE=FI
  1079. END IF
  1080. ! TURB
  1081. IF (LCAL(IED)) THEN
  1082. FI=ED
  1083. IFI=IED
  1084. CALL CALCSC(FI,IFI)
  1085. ED=FI
  1086. END IF
  1087. ! TURB
  1088. IF (LCAL(IVIS)) THEN
  1089. CALL MODVIS
  1090. END IF
  1091. !
  1092. PRINT *,ITER,' / ',MAXIT
  1093. !
  1094. !.....CHECK CONVERGENCE OF OUTER ITERATIONS
  1095. ! T
  1096. ! TURB
  1097. WRITE(TUNIT,606) ITER,RESOR(IU),RESOR(IW),RESOR(IP),&
  1098. &RESOR(IEN),RESOR(ITE),RESOR(IED),U(IJKMON),W(IJKMON),&
  1099. &P(IJKMON),T(IJKMON),TE(IJKMON),ED(IJKMON)
  1100. ! TURB
  1101. ! SOURCE=MAX(RESOR(IU),RESOR(IV),RESOR(IW),RESOR(IP),&
  1102. ! &RESOR(IEN),RESOR(ITE))
  1103. SOURCE=RESOR(IP)
  1104. !
  1105. IF(SOURCE.GT.SLARGE) GO TO 510
  1106. IF(SOURCE.LT.SORMAX) GO TO 250
  1107. !
  1108. END DO
  1109. !
  1110. ! CLOSE(TUNIT)
  1111. !
  1112. 250 CONTINUE
  1113. !
  1114. !.....CONVERGED: IF UNSTEADY FLOW, PRINT AND SAVE NPRTth
  1115. ! SOLUTION
  1116. !
  1117. CALL P3D
  1118. !
  1119. WRITE(TUNIT,*)
  1120. WRITE(TUNIT,*) 'IJK U V W P TE ED'
  1121. DO J=NJ,1,-1
  1122. IJK=LK(202)+LI(11)+J
  1123. WRITE(TUNIT,*) IJK,U(IJK),V(IJK),W(IJK),P(IJK),TE(IJK),ED(IJK)
  1124. END DO
  1125. !
  1126. CLOSE(TUNIT)
  1127. !
  1128. !==============================================================
  1129. !.....ALL TIME STEPS DONE; SAVE LAST SOLUTION FOR CONTINUATION
  1130. !==============================================================
  1131. ! BLK
  1132. ! T
  1133. ! TURB
  1134. IF (LWRITE) THEN
  1135. OPEN (UNIT=SUNIT,FILE='cgbpar.res',STATUS='UNKNOWN',&
  1136. &FORM='UNFORMATTED')
  1137. WRITE(SUNIT) (U(IJK),IJK=1,NIJK),&
  1138. &(V(IJK),IJK=1,NIJK),&
  1139. &(W(IJK),IJK=1,NIJK),&
  1140. &(P(IJK),IJK=1,NIJK),&
  1141. &(T(IJK),IJK=1,NIJK),&
  1142. &(TE(IJK),IJK=1,NIJK),&
  1143. &(ED(IJK),IJK=1,NIJK),&
  1144. &(VIS(IJK),IJK=1,NIJK),&
  1145. &(F1(IJK),IJK=1,NIJK),&
  1146. &(F2(IJK),IJK=1,NIJK),&
  1147. &(F3(IJK),IJK=1,NIJK)
  1148. CLOSE(SUNIT)
  1149. ENDIF
  1150. !
  1151. STOP
  1152. !
  1153. !==============================================================
  1154. !......MESSAGE FOR DIVERGENCE
  1155. !==============================================================
  1156. !
  1157. 510 PRINT *,' *** TERMINATED - OUTER ITERATIONS&
  1158. & DIVERGING ***'
  1159. !
  1160. WRITE(TUNIT,*)
  1161. WRITE(TUNIT,*) 'IJK U V W P TE ED'
  1162. DO J=NJ,1,-1
  1163. IJK=LK(202)+LI(11)+J
  1164. WRITE(TUNIT,*) IJK,U(IJK),V(IJK),W(IJK),P(IJK),TE(IJK),ED(IJK)
  1165. END DO
  1166. !
  1167. CLOSE(TUNIT)
  1168. !
  1169. STOP
  1170. !
  1171. !==============================================================
  1172. !......FORMAT SPECIFICATIONS
  1173. !==============================================================
  1174. ! TURB
  1175. 600 FORMAT(1X,'ITER.',3X,'I--------------------ABSOLUTE&
  1176. & RESIDUAL SOURCE SUMS-------------------I',3X,&
  1177. &'I---------------FIELD VALUES AT MONITORING LOCATION&
  1178. & (',I3,',',I3,',',I3,&
  1179. &')-------------I',/,2X,'NO.',9X,'U',11X,'W',11X,'MASS',11X,'T',&
  1180. &11X,'TE',9X,'ED',16X,'U',11X,'W',11X,'P',11X,'T',11X,'TE',&
  1181. &11X,'ED',/)
  1182. ! T
  1183. ! TURB
  1184. 606 FORMAT(1X,I4,2X,1P6E12.4,5X,1P6E12.4)
  1185. !
  1186. END PROGRAM PCOL
  1187. !
  1188. !###########################################################
  1189. SUBROUTINE CALCUVW
  1190. !###########################################################
  1191. !-----------------------------------------------------------
  1192. USE GLOBAL
  1193. IMPLICIT NONE
  1194. !
  1195. DOUBLE PRECISION :: URFU,URFV,URFW
  1196. DOUBLE PRECISION :: PE,PW,PN,PS,PT,PB
  1197. DOUBLE PRECISION :: FUUDS,FVUDS,FWUDS,FUCDS,FVCDS,FWCDS
  1198. ! LUD
  1199. DOUBLE PRECISION :: ALIFUE=0.,ALIFUN=0.,ALIFUT=0.
  1200. DOUBLE PRECISION :: ALIFVE=0.,ALIFVN=0.,ALIFVT=0.
  1201. DOUBLE PRECISION :: ALIFWE=0.,ALIFWN=0.,ALIFWT=0.
  1202. ! LUD
  1203. DOUBLE PRECISION :: FULUD=0.,FVLUD=0.,FWLUD=0.
  1204. DOUBLE PRECISION :: SAIMUE=0.,SAIMUN=0.,SAIMUT=0.
  1205. DOUBLE PRECISION :: SAIMVE=0.,SAIMVN=0.,SAIMVT=0.
  1206. DOUBLE PRECISION :: SAIMWE=0.,SAIMWN=0.,SAIMWT=0.
  1207. DOUBLE PRECISION :: SAIPUE=0.,SAIPUN=0.,SAIPUT=0.
  1208. DOUBLE PRECISION :: SAIPVE=0.,SAIPVN=0.,SAIPVT=0.
  1209. DOUBLE PRECISION :: SAIPWE=0.,SAIPWN=0.,SAIPWT=0.
  1210. !-----------------------------------------------------------
  1211. ! T
  1212. !
  1213. !.....RECIPROCAL VALUES OF UNDER-RELAXATION FACTORS FOR U AND V
  1214. ! 3D
  1215. URFU=1./URF(IU)
  1216. URFV=1./URF(IV)
  1217. URFW=1./URF(IW)
  1218. !
  1219. !.....SET BOUNDARY PRESSURE (LINEAR EXTRAPOLATION FROM INSIDE)
  1220. !
  1221. ! MPI
  1222. CALL PBOUND(P,PS1,PB2)
  1223. !
  1224. !.....INITIALIZE TEMPORARILY STORED VARIABLES
  1225. ! 3D
  1226. DO IJK=1,NIJK
  1227. SU(IJK)=0.
  1228. SV(IJK)=0.
  1229. SW(IJK)=0.
  1230. APU(IJK)=0.
  1231. APV(IJK)=0.
  1232. APW(IJK)=0.
  1233. END DO
  1234. !
  1235. !==========================================================
  1236. !.....FLUXES THROUGH INTERNAL EAST CV FACES
  1237. !=========================================================
  1238. ! F1(IJK) is the mass flux through the east face (outward
  1239. ! normal directed to E); FX(I) is the ratio of distance
  1240. ! from P to cell face, to distance from P to E; IJK
  1241. ! denotes node P and IJKE node E.
  1242. ! Contribution of convective and diffusive fluxes from
  1243. ! east face to AE(P), AW(E), and source terms at both
  1244. ! P and E are calculated; contributions to AP(P) and
  1245. ! AP(E) come through the sum of neighbor coefficients
  1246. ! and are not explicitly calculated.
  1247. !----------------------------------------------------------
  1248. ! 3D
  1249. ! BLK
  1250. DO B=1,3
  1251. !
  1252. DO K=BZS(B),BZE(B)
  1253. !
  1254. DO I=2,NIM-1
  1255. !
  1256. !.....INTERPOLATION FACTORS, DISTANCE FROM P TO E (SAME FOR ALL J)
  1257. !
  1258. FXE =FX(I)
  1259. FXP =1.-FXE
  1260. DXPE=XC(I+1)-XC(I)
  1261. ! 3D
  1262. DO J=BYS(B),BYE(B)
  1263. !
  1264. IJK =LK(K)+LI(I)+J
  1265. IJKE=IJK+NJ
  1266. !
  1267. !.....CELL FACE AREA S = DY*DZ
  1268. ! 3D
  1269. S=(Y(J)-Y(J-1))*(Z(K)-Z(K-1))
  1270. !
  1271. !.....CALCULATE VISCOSITY
  1272. ! TURB
  1273. VISI=VIS(IJKE)*FX(I)+VIS(IJK)*(1.-FX(I))
  1274. !
  1275. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
  1276. !
  1277. ! D=VISC*S/DXPE
  1278. ! TURB
  1279. D=VISI*S/DXPE
  1280. ! NANO
  1281. DNA1=VISI/((1.-PHIS)**2.5)
  1282. D=DNA1*S/DXPE
  1283. !
  1284. !.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
  1285. ! 3D
  1286. !
  1287. IF (F1(IJK).LE.0.) THEN
  1288. CE=F1(IJK)
  1289. ELSE
  1290. CE=0.
  1291. END IF
  1292. IF (F1(IJK).GT.0.) THEN
  1293. CP=F1(IJK)
  1294. ELSE
  1295. CP=0.
  1296. END IF
  1297. !
  1298. !.....LUD
  1299. !
  1300. FULUD=0.;FVLUD=0.;FWLUD=0.
  1301. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  1302. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  1303. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  1304. !
  1305. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS ALIFUW OF
  1306. ! CELL IJE, SO, NO NEED TO REPEAT.
  1307. ! LUD
  1308. IF (F1(IJK).LT.0.) THEN
  1309. ALIFUE=0.
  1310. ALIFVE=0.
  1311. ALIFWE=0.
  1312. SAIMUE=(U(IJK+NJ+NJ)-U(IJK+NJ))/((U(IJK+NJ)-U(IJK))+SMALL)
  1313. SAIMVE=(V(IJK+NJ+NJ)-V(IJK+NJ))/((V(IJK+NJ)-V(IJK))+SMALL)
  1314. SAIMWE=(W(IJK+NJ+NJ)-W(IJK+NJ))/((W(IJK+NJ)-W(IJK))+SMALL)
  1315. END IF
  1316. ! LUD
  1317. IF (F1(IJK).GE.0.) THEN
  1318. ALIFUE=1.
  1319. ALIFVE=1.
  1320. ALIFWE=1.
  1321. SAIPUE=(U(IJK)-U(IJK-NJ))/((U(IJK+NJ)-U(IJK))+SMALL)
  1322. SAIPVE=(V(IJK)-V(IJK-NJ))/((V(IJK+NJ)-V(IJK))+SMALL)
  1323. SAIPWE=(W(IJK)-W(IJK-NJ))/((W(IJK+NJ)-W(IJK))+SMALL)
  1324. END IF
  1325. ! LUD2
  1326. T1=(1.-ALIFUE)*SAIMUE-ALIFUE*SAIPUE
  1327. T2=U(IJK+NJ)-U(IJK)
  1328. FULUD=0.5*F1(IJK)*T1*T2
  1329. ! LUD2
  1330. T1=(1.-ALIFVE)*SAIMVE-ALIFVE*SAIPVE
  1331. T2=V(IJK+NJ)-V(IJK)
  1332. FVLUD=0.5*F1(IJK)*T1*T2
  1333. ! LUD2
  1334. T1=(1.-ALIFWE)*SAIMWE-ALIFWE*SAIPWE
  1335. T2=W(IJK+NJ)-W(IJK)
  1336. FWLUD=0.5*F1(IJK)*T1*T2
  1337. !
  1338. END IF
  1339. END IF
  1340. END IF
  1341. !
  1342. !.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
  1343. ! 3D
  1344. AE(IJK) = CE-D
  1345. AW(IJKE)=-CP-D
  1346. ! LUD
  1347. ! 3D
  1348. FUUDS=CP*U(IJK)+CE*U(IJKE)
  1349. FVUDS=CP*V(IJK)+CE*V(IJKE)
  1350. FWUDS=CP*W(IJK)+CE*W(IJKE)
  1351. FUCDS=F1(IJK)*(U(IJKE)*FXE+U(IJK)*FXP)
  1352. FVCDS=F1(IJK)*(V(IJKE)*FXE+V(IJK)*FXP)
  1353. FWCDS=F1(IJK)*(W(IJKE)*FXE+W(IJK)*FXP)
  1354. !
  1355. !.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED
  1356. ! CORRECTION
  1357. ! 3D
  1358. ! LUD
  1359. SU(IJK) =SU(IJK) +GDS(IU)*(FUUDS-FUCDS)+LFAC*FULUD
  1360. SU(IJKE)=SU(IJKE)-GDS(IU)*(FUUDS-FUCDS)-LFAC*FULUD
  1361. SV(IJK) =SV(IJK) +GDS(IU)*(FVUDS-FVCDS)+LFAC*FVLUD
  1362. SV(IJKE)=SV(IJKE)-GDS(IU)*(FVUDS-FVCDS)-LFAC*FVLUD
  1363. SW(IJK) =SW(IJK) +GDS(IU)*(FWUDS-FWCDS)+LFAC*FWLUD
  1364. SW(IJKE)=SW(IJKE)-GDS(IU)*(FWUDS-FWCDS)-LFAC*FWLUD
  1365. ! LUD
  1366. !
  1367. !.....LUD
  1368. !
  1369. !
  1370. END DO
  1371. END DO
  1372. END DO
  1373. !
  1374. END DO
  1375. !
  1376. !=========================================================
  1377. !.....FLUXES THROUGH INTERNAL NORTH CV FACES
  1378. !=========================================================
  1379. ! F2(IJK) is the mass flux through the north face (outward
  1380. ! normal directed to N); FY(J) is the ratio of distance
  1381. ! from P to cell face, to distance from P to N; IJK
  1382. ! denotes node P and IJKN node N.
  1383. ! Contribution of convective and diffusive fluxes from
  1384. ! north face to AN(P), AS(N), and source terms at both
  1385. ! P and N are calculated; contributions to AP(P) and
  1386. ! AP(N) come through the sum of neighbor coefficients
  1387. ! and are not explicitly calculated.
  1388. !----------------------------------------------------------
  1389. ! 3D
  1390. ! BLK
  1391. DO B=1,3
  1392. !
  1393. DO K=BZS(B),BZE(B)
  1394. !
  1395. IF (BYE(B).EQ.NJM) THEN
  1396. JE=BYE(B)-1
  1397. ELSE
  1398. JE=BYE(B)
  1399. END IF
  1400. !
  1401. DO J=BYS(B),JE
  1402. !
  1403. !.....INTERPOLATION FACTORS, DISTANCE FROM P TO N (SAME FOR ALL ! J)
  1404. !
  1405. FYN =FY(J)
  1406. FYP =1.-FYN
  1407. DYPN=YC(J+1)-YC(J)
  1408. ! 3D
  1409. DO I=2,NIM
  1410. IJK =LK(K)+LI(I)+J
  1411. IJKN=IJK+1
  1412. !
  1413. !.....CELL FACE AREA S = DX*DZ
  1414. ! 3D
  1415. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  1416. !
  1417. !.....CALCULATE VISCOSITY
  1418. ! TURB
  1419. VISI=VIS(IJKN)*FY(J)+VIS(IJK)*(1.-FY(J))
  1420. !
  1421. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND ! V)
  1422. !
  1423. ! D=VISC*S/DYPN
  1424. ! TURB
  1425. D=VISI*S/DYPN
  1426. ! NANO
  1427. DNA1=VISI/((1.-PHIS)**2.5)
  1428. D=DNA1*S/DYPN
  1429. !
  1430. !.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
  1431. !
  1432. IF (F2(IJK).LE.0.) THEN
  1433. CN=F2(IJK)
  1434. ELSE
  1435. CN=0.
  1436. END IF
  1437. IF (F2(IJK).GT.0.) THEN
  1438. CP=F2(IJK)
  1439. ELSE
  1440. CP=0.
  1441. END IF
  1442. !
  1443. !.....LUD
  1444. ! LUD
  1445. FULUD=0.;FVLUD=0.;FWLUD=0.
  1446. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  1447. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  1448. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  1449. !
  1450. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS ALIFUW
  1451. ! OF CELL IJN, SO, NO NEED TO REPEAT.
  1452. ! LUD
  1453. IF (F2(IJK).LT.0.) THEN
  1454. ALIFUN=0.
  1455. ALIFVN=0.
  1456. ALIFWN=0.
  1457. SAIMUN=(U(IJK+1+1)-U(IJK+1))/((U(IJK+1)-U(IJK))+SMALL)
  1458. SAIMVN=(V(IJK+1+1)-V(IJK+1))/((V(IJK+1)-V(IJK))+SMALL)
  1459. SAIMWN=(W(IJK+1+1)-W(IJK+1))/((W(IJK+1)-W(IJK))+SMALL)
  1460. END IF
  1461. ! LUD
  1462. IF (F2(IJK).GE.0.) THEN
  1463. ALIFUN=1.
  1464. ALIFVN=1.
  1465. ALIFWN=1.
  1466. SAIPUN=(U(IJK)-U(IJK-1))/((U(IJK+1)-U(IJK))+SMALL)
  1467. SAIPVN=(V(IJK)-V(IJK-1))/((V(IJK+1)-V(IJK))+SMALL)
  1468. SAIPWN=(W(IJK)-W(IJK-1))/((W(IJK+1)-W(IJK))+SMALL)
  1469. END IF
  1470. ! LUD2
  1471. T1=(1.-ALIFUN)*SAIMUN-ALIFUN*SAIPUN
  1472. T2=U(IJK+1)-U(IJK)
  1473. FULUD=0.5*F2(IJK)*T1*T2
  1474. ! LUD2
  1475. T1=(1.-ALIFVN)*SAIMVN-ALIFVN*SAIPVN
  1476. T2=V(IJK+1)-V(IJK)
  1477. FVLUD=0.5*F2(IJK)*T1*T2
  1478. ! LUD2
  1479. T1=(1.-ALIFWN)*SAIMWN-ALIFWN*SAIPWN
  1480. T2=W(IJK+1)-W(IJK)
  1481. FWLUD=0.5*F2(IJK)*T1*T2
  1482. !
  1483. END IF
  1484. END IF
  1485. END IF
  1486. !
  1487. !.....COEFFICIENTS AN(P) AND AS(N) DUE TO UDS
  1488. ! 3D
  1489. AN(IJK) = CN-D
  1490. AS(IJKN)=-CP-D
  1491. ! LUD
  1492. ! 3D
  1493. FUUDS=CP*U(IJK)+CN*U(IJKN)
  1494. FVUDS=CP*V(IJK)+CN*V(IJKN)
  1495. FWUDS=CP*W(IJK)+CN*W(IJKN)
  1496. FUCDS=F2(IJK)*(U(IJKN)*FYN+U(IJK)*FYP)
  1497. FVCDS=F2(IJK)*(V(IJKN)*FYN+V(IJK)*FYP)
  1498. FWCDS=F2(IJK)*(W(IJKN)*FYN+W(IJK)*FYP)
  1499. !
  1500. !.....SOURCE TERM CONTRIBUTIONS AT P AND N DUE TO DEFERRED
  1501. ! CORRECTION
  1502. ! 3D
  1503. ! LUD
  1504. SU(IJK) =SU(IJK) +GDS(IU)*(FUUDS-FUCDS)+LFAC*FULUD
  1505. SU(IJKN)=SU(IJKN)-GDS(IU)*(FUUDS-FUCDS)-LFAC*FULUD
  1506. SV(IJK) =SV(IJK) +GDS(IU)*(FVUDS-FVCDS)+LFAC*FVLUD
  1507. SV(IJKN)=SV(IJKN)-GDS(IU)*(FVUDS-FVCDS)-LFAC*FVLUD
  1508. SW(IJK) =SW(IJK) +GDS(IU)*(FWUDS-FWCDS)+LFAC*FWLUD
  1509. SW(IJKN)=SW(IJKN)-GDS(IU)*(FWUDS-FWCDS)-LFAC*FWLUD
  1510. END DO
  1511. END DO
  1512. END DO
  1513. !
  1514. END DO
  1515. ! 3D
  1516. !=========================================================
  1517. !.....FLUXES THROUGH INTERNAL TOP CV FACES
  1518. !=========================================================
  1519. ! F3(IJK) is the mass flux through the top face (outward
  1520. ! normal directed to T); FZ(K) is the ratio of distance
  1521. ! from P to cell face, to distance from P to T; IJK
  1522. ! denotes node P and IJKT node T.
  1523. ! Contribution of convective and diffusive fluxes from
  1524. ! top face to AT(P), AB(T), and source terms at both
  1525. ! P and T are calculated; contributions to AP(P) and
  1526. ! AP(T) come through the sum of neighbor coefficients
  1527. ! and are not explicitly calculated.
  1528. !----------------------------------------------------------
  1529. ! MPI for U(IJK+NIJ)
  1530. !
  1531. ! MPI
  1532. !
  1533. ! MPI
  1534. !
  1535. ! MPI
  1536. ! 3D
  1537. ! BLK
  1538. DO B=1,3
  1539. !
  1540. IF (BZE(B).EQ.NKM) THEN
  1541. KE=BZE(B)-1
  1542. ELSE
  1543. KE=BZE(B)
  1544. END IF
  1545. !
  1546. DO K=BZS(B),KE
  1547. !
  1548. FZT=FZ(K)
  1549. FZP=1.-FZT
  1550. DZPT=ZC(K+1)-ZC(K)
  1551. !
  1552. DO J=BYS(B),BYE(B)
  1553. !
  1554. DO I=2,NIM
  1555. IJK =LK(K)+LI(I)+J
  1556. IJKT=IJK+NIJ
  1557. !
  1558. !.....CELL FACE AREA S = DX*RN*1
  1559. !
  1560. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  1561. !
  1562. !.....CALCULATE VISCOSITY
  1563. ! TURB
  1564. VISI=VIS(IJKT)*FZ(K)+VIS(IJK)*(1.-FZ(K))
  1565. !
  1566. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
  1567. !
  1568. ! D=VISC*S/DZPT
  1569. ! TURB
  1570. D=VISI*S/DZPT
  1571. ! NANO
  1572. DNA1=VISI/((1.-PHIS)**2.5)
  1573. D=DNA1*S/DZPT
  1574. !
  1575. !.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
  1576. !
  1577. IF (F3(IJK).LE.0.) THEN
  1578. CT=F3(IJK)
  1579. ELSE
  1580. CT=0.
  1581. END IF
  1582. IF (F3(IJK).GT.0.) THEN
  1583. CP=F3(IJK)
  1584. ELSE
  1585. CP=0.
  1586. END IF
  1587. !
  1588. !.....LUD
  1589. !
  1590. FULUD=0.;FVLUD=0.;FWLUD=0.
  1591. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  1592. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  1593. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  1594. !
  1595. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS ALIFUW
  1596. ! OF CELL IJN, SO, NO NEED TO REPEAT.
  1597. ! LUD
  1598. IF (F3(IJK).LT.0.) THEN
  1599. ALIFUT=0.
  1600. ALIFVT=0.
  1601. ALIFWT=0.
  1602. SAIMUT=(U(IJK+NIJ+NIJ)-U(IJK+NIJ))/((U(IJK+NIJ)-U(IJK))+SMALL)
  1603. SAIMVT=(V(IJK+NIJ+NIJ)-V(IJK+NIJ))/((V(IJK+NIJ)-V(IJK))+SMALL)
  1604. SAIMWT=(W(IJK+NIJ+NIJ)-W(IJK+NIJ))/((W(IJK+NIJ)-W(IJK))+SMALL)
  1605. END IF
  1606. ! LUD
  1607. IF (F3(IJK).GE.0.) THEN
  1608. ALIFUT=1.
  1609. ALIFVT=1.
  1610. ALIFWT=1.
  1611. SAIPUT=(U(IJK)-U(IJK-NIJ))/((U(IJK+NIJ)-U(IJK))+SMALL)
  1612. SAIPVT=(V(IJK)-V(IJK-NIJ))/((V(IJK+NIJ)-V(IJK))+SMALL)
  1613. SAIPWT=(W(IJK)-W(IJK-NIJ))/((W(IJK+NIJ)-W(IJK))+SMALL)
  1614. END IF
  1615. ! LUD
  1616. T1=(1.-ALIFUT)*SAIMUT-ALIFUT*SAIPUT
  1617. T2=U(IJK+NIJ)-U(IJK)
  1618. FULUD=0.5*F3(IJK)*T1*T2
  1619. ! LUD
  1620. T1=(1.-ALIFVT)*SAIMVT-ALIFVT*SAIPVT
  1621. T2=V(IJK+NIJ)-V(IJK)
  1622. FVLUD=0.5*F3(IJK)*T1*T2
  1623. ! LUD
  1624. T1=(1.-ALIFWT)*SAIMWT-ALIFWT*SAIPWT
  1625. T2=W(IJK+NIJ)-W(IJK)
  1626. FWLUD=0.5*F3(IJK)*T1*T2
  1627. ! LUD
  1628. END IF
  1629. END IF
  1630. END IF
  1631. !
  1632. !.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
  1633. !
  1634. AT(IJK) = CT-D
  1635. AB(IJKT)=-CP-D
  1636. !
  1637. FUUDS=CP*U(IJK)+CT*U(IJKT)
  1638. FVUDS=CP*V(IJK)+CT*V(IJKT)
  1639. FWUDS=CP*W(IJK)+CT*W(IJKT)
  1640. FUCDS=F3(IJK)*(U(IJKT)*FZT+U(IJK)*FZP)
  1641. FVCDS=F3(IJK)*(V(IJKT)*FZT+V(IJK)*FZP)
  1642. FWCDS=F3(IJK)*(W(IJKT)*FZT+W(IJK)*FZP)
  1643. !
  1644. !.....SOURCE TERM CONTRIBUTIONS AT P AND N DUE TO DEFERRED
  1645. ! CORRECTION
  1646. ! 3D
  1647. ! LUD
  1648. SU(IJK) =SU(IJK) +GDS(IU)*(FUUDS-FUCDS)+LFAC*FULUD
  1649. SU(IJKT)=SU(IJKT)-GDS(IU)*(FUUDS-FUCDS)-LFAC*FULUD
  1650. SV(IJK) =SV(IJK) +GDS(IU)*(FVUDS-FVCDS)+LFAC*FVLUD
  1651. SV(IJKT)=SV(IJKT)-GDS(IU)*(FVUDS-FVCDS)-LFAC*FVLUD
  1652. SW(IJK) =SW(IJK) +GDS(IU)*(FWUDS-FWCDS)+LFAC*FWLUD
  1653. SW(IJKT)=SW(IJKT)-GDS(IU)*(FWUDS-FWCDS)-LFAC*FWLUD
  1654. !
  1655. END DO
  1656. END DO
  1657. END DO
  1658. !
  1659. END DO
  1660. !
  1661. ! MPI for AB(IJK+NIJ)
  1662. !
  1663. !=============================================================
  1664. !.....VOLUME INTEGRALS (SOURCE TERMS)
  1665. !=============================================================
  1666. ! Cell-face pressure calculated using linear interpolation;
  1667. ! cell volume is VOL, RP is the radius at node P; DX and DY
  1668. ! are the width and height of the cell. Contribution to AP
  1669. ! coefficient from volume integrals is stored temporarily
  1670. ! in arrays APU and APV for U and V, respectively; these
  1671. ! arrays are later used to store 1/AP, which is needed in
  1672. ! the pressure-correction equation.
  1673. !--------------------------------------------------------------
  1674. ! BLK
  1675. DO B=1,3
  1676. !
  1677. ! MPI for P(IJK-NIJ)
  1678. !
  1679. DO K=BZS(B),BZE(B)
  1680. DZ=Z(K)-Z(K-1)
  1681. !
  1682. DO I=2,NIM
  1683. DX=X(I)-X(I-1)
  1684. !
  1685. DO J=BYS(B),BYE(B)
  1686. DY=Y(J)-Y(J-1)
  1687. !
  1688. IJK=LK(K)+LI(I)+J
  1689. !
  1690. !...... CELL-FACE PRESSURE, CELL-CENTER GRADIENT, SOURCE
  1691. ! 3D
  1692. PE=P(IJK+NJ)*FX(I)+P(IJK)*(1.-FX(I))
  1693. PW=P(IJK)*FX(I-1)+P(IJK-NJ)*(1.-FX(I-1))
  1694. !
  1695. PN=P(IJK+1)*FY(J)+P(IJK)*(1.-FY(J))
  1696. ! BLK
  1697. IF (B.EQ.1.AND.J.EQ.BYS(B)) THEN
  1698. IK=(K-1)*NI+I
  1699. PS=PS1(IK)
  1700. ELSE
  1701. PS=P(IJK)*FY(J-1)+P(IJK-1)*(1.-FY(J-1))
  1702. END IF
  1703. !
  1704. PT=P(IJK+NIJ)*FZ(K)+P(IJK)*(1.-FZ(K))
  1705. ! BLK
  1706. IF (B.EQ.2.AND.K.EQ.BZS(B)) THEN
  1707. IJ =(I-1)*NJ+J
  1708. PB=PB2(IJ)
  1709. ELSE
  1710. PB=P(IJK)*FZ(K-1)+P(IJK-NIJ)*(1.-FZ(K-1))
  1711. END IF
  1712. !
  1713. DPX(IJK)=(PE-PW)/DX
  1714. DPY(IJK)=(PN-PS)/DY
  1715. DPZ(IJK)=(PT-PB)/DZ
  1716. ! TURB
  1717. SU(IJK)=SU(IJK)-DPX(IJK)*VOL(IJK)
  1718. SV(IJK)=SV(IJK)-DPY(IJK)*VOL(IJK)
  1719. SW(IJK)=SW(IJK)-DPZ(IJK)*VOL(IJK)
  1720. !
  1721. END DO
  1722. END DO
  1723. END DO
  1724. !
  1725. END DO
  1726. !
  1727. !=============================================================
  1728. !.....PROBLEM MODIFICATIONS - BOUNDARY CONDITIONS
  1729. !=============================================================
  1730. ! 3D
  1731. CALL BCUVW
  1732. !
  1733. !=============================================================
  1734. !.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR U-VELOCITY
  1735. !=============================================================
  1736. ! 3D
  1737. ! BLK
  1738. DO B=1,3
  1739. !
  1740. DO K=BZS(B),BZE(B)
  1741. !
  1742. DO I=2,NIM
  1743. !
  1744. DO J=BYS(B),BYE(B)
  1745. !
  1746. IJK=LK(K)+LI(I)+J
  1747. AP(IJK)=(-AE(IJK)-AW(IJK)-AN(IJK)-AS(IJK)-AT(IJK)-&
  1748. &AB(IJK)+APU(IJK))*URFU
  1749. SU(IJK)=SU(IJK)+(1.-URF(IU))*AP(IJK)*U(IJK)
  1750. APU(IJK)=1./AP(IJK)
  1751. END DO
  1752. END DO
  1753. END DO
  1754. !
  1755. END DO
  1756. !
  1757. ! MPI for U(IJK+NIJ)
  1758. !
  1759. CALL CGSTAB(U,IU)
  1760. !
  1761. !=============================================================
  1762. !.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR V-VELOCITY
  1763. !=============================================================
  1764. ! 3D
  1765. ! BLK
  1766. DO B=1,3
  1767. !
  1768. DO K=BZS(B),BZE(B)
  1769. !
  1770. DO I=2,NIM
  1771. !
  1772. DO J=BYS(B),BYE(B)
  1773. !
  1774. IJK=LK(K)+LI(I)+J
  1775. AP(IJK)=(-AE(IJK)-AW(IJK)-AN(IJK)-AS(IJK)-AT(IJK)-&
  1776. &AB(IJK)+APV(IJK))*URFV
  1777. SU(IJK)=SV(IJK)+(1.-URF(IV))*AP(IJK)*V(IJK)
  1778. APV(IJK)=1./AP(IJK)
  1779. END DO
  1780. END DO
  1781. END DO
  1782. !
  1783. END DO
  1784. !
  1785. ! MPI for V(IJK+NIJ)
  1786. !
  1787. CALL CGSTAB(V,IV)
  1788. ! 3D
  1789. !=============================================================
  1790. !.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR W-VELOCITY
  1791. !=============================================================
  1792. ! 3D
  1793. ! BLK
  1794. DO B=1,3
  1795. !
  1796. DO K=BZS(B),BZE(B)
  1797. !
  1798. DO I=2,NIM
  1799. !
  1800. DO J=BYS(B),BYE(B)
  1801. !
  1802. IJK=LK(K)+LI(I)+J
  1803. AP(IJK)=(-AE(IJK)-AW(IJK)-AN(IJK)-AS(IJK)-AT(IJK)-&
  1804. &AB(IJK)+APW(IJK))*URFW
  1805. SU(IJK)=SW(IJK)+(1.-URF(IW))*AP(IJK)*W(IJK)
  1806. APW(IJK)=1./AP(IJK)
  1807. END DO
  1808. END DO
  1809. END DO
  1810. !
  1811. END DO
  1812. ! 3D
  1813. ! MPI for W(IJK+NIJ)
  1814. !
  1815. CALL CGSTAB(W,IW)
  1816. !
  1817. END SUBROUTINE CALCUVW
  1818. !
  1819. !##############################################################
  1820. SUBROUTINE CALCP
  1821. !##############################################################
  1822. ! This routine assembles and solves the pressure-correction
  1823. ! equation. Cell-face values of velocity components, used
  1824. ! to calculate the mass fluxes, are obtained by linear
  1825. ! interpolation and then corrected by adding a term
  1826. ! proportional to the third derivative of pressure and
  1827. ! squared grid spacing, as described in Chap. 7, Sect.
  1828. ! 7.5.3.
  1829. !--------------------------------------------------------------
  1830. USE GLOBAL
  1831. IMPLICIT NONE
  1832. !
  1833. INTEGER :: IJPREF
  1834. !
  1835. DOUBLE PRECISION :: DPXE,DPYN,DPZT
  1836. DOUBLE PRECISION :: DPXEL,DPYNL,DPZTL
  1837. DOUBLE PRECISION :: VOLE,VOLN,VOLT
  1838. DOUBLE PRECISION :: SUM,PPO
  1839. DOUBLE PRECISION :: UEL,VNL,WTL
  1840. DOUBLE PRECISION :: APUE,APVN,APWT
  1841. ! DOUBLE PRECISION :: UE,VN,WT
  1842. DOUBLE PRECISION :: PPE,PPW,PPN,PPS,PPT,PPB
  1843. !--------------------------------------------------------------
  1844. ! T
  1845. !
  1846. !.....SET INDICES, INITIALIZE FIELDS
  1847. ! INLET OUTLET
  1848. SUM=0.
  1849. !
  1850. !.....INITIALIZATION OF TEMPORARILY STORED VARIABLES
  1851. ! INLET OUTLET
  1852. ! 3D
  1853. DO IJK=1,NIJK
  1854. SU(IJK)=0.
  1855. AP(IJK)=0.
  1856. END DO
  1857. !
  1858. !============================================================
  1859. !.....EAST CV FACES (S - AREA, VOLE - VOLUME BETWEEN P AND E)
  1860. !============================================================
  1861. ! BLK
  1862. DO B=1,3
  1863. !
  1864. DO K=BZS(B),BZE(B)
  1865. !
  1866. DO I=2,NIM-1
  1867. !
  1868. !.....INTERPOLATION FACTORS, DISTANCE FROM P TO E (SAME FOR ALL J)
  1869. !
  1870. DXPE=XC(I+1)-XC(I)
  1871. FXE=FX(I)
  1872. FXP=1.-FXE
  1873. !
  1874. DO J=BYS(B),BYE(B)
  1875. !
  1876. IJK=LK(K)+LI(I)+J
  1877. IJKE=IJK+NJ
  1878. !
  1879. S=(Y(J)-Y(J-1))*(Z(K)-Z(K-1))
  1880. VOLE=DXPE*S
  1881. D=DENSIT*S
  1882. ! NANO
  1883. D=DNA2*S
  1884. !
  1885. !.....INTERPOLATED CELL FACE QUANTITIES (PRESSURE GRAD., U AND
  1886. ! 1/AP). Note: pressure gradient is interpolated midway
  1887. ! between P and E, since the gradient calculated at cell
  1888. ! face is second order accurate at that location; the
  1889. ! velocity is interpolated linearly, to achieve second order
  1890. ! accuracy at cell face center.
  1891. !
  1892. DPXEL=0.5*(DPX(IJKE)+DPX(IJK))
  1893. UEL=U(IJKE)*FXE+U(IJK)*FXP
  1894. APUE=APU(IJKE)*FXE+APU(IJK)*FXP
  1895. !
  1896. !.....CELL FACE GRADIENT, VELOCITY AND MASS FLUX
  1897. !
  1898. DPXE=(P(IJKE)-P(IJK))/DXPE
  1899. UE=UEL-APUE*VOLE*(DPXE-DPXEL)
  1900. F1(IJK)=D*UE
  1901. !
  1902. !.....COEFFICIENTS OF P' EQUATION, AE(P) AND AW(E)
  1903. !
  1904. AE(IJK)=-D*APUE*S
  1905. AW(IJKE)=AE(IJK)
  1906. !
  1907. END DO
  1908. END DO
  1909. END DO
  1910. !
  1911. END DO
  1912. !
  1913. !=============================================================
  1914. !.....NORTH CV FACES (S - AREA, VOLN - VOLUME BETWEEN P AND N)
  1915. !=============================================================
  1916. ! BLK
  1917. DO B=1,3
  1918. !
  1919. DO K=BZS(B),BZE(B)
  1920. !
  1921. IF (BYE(B).EQ.NJM) THEN
  1922. JE=BYE(B)-1
  1923. ELSE
  1924. JE=BYE(B)
  1925. END IF
  1926. !
  1927. DO J=BYS(B),JE
  1928. !
  1929. DYPN=YC(J+1)-YC(J)
  1930. FYN=FY(J)
  1931. FYP=1.-FYN
  1932. !
  1933. DO I=2,NIM
  1934. IJK=LK(K)+LI(I)+J
  1935. IJKN=IJK+1
  1936. !
  1937. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  1938. VOLN=S*DYPN
  1939. D=DENSIT*S
  1940. ! NANO
  1941. D=DNA2*S
  1942. !
  1943. !.....INTERPOLATED CELL-FACE QUANTITIES (PRESSURE GRAD., U AND
  1944. ! 1/AP)
  1945. !
  1946. DPYNL=0.5*(DPY(IJKN)+DPY(IJK))
  1947. VNL=V(IJKN)*FYN+V(IJK)*FYP
  1948. APVN=APV(IJKN)*FYN+APV(IJK)*FYP
  1949. !
  1950. !.....CELL-FACE GRADIENT, VELOCITY AND MASS FLUX
  1951. !
  1952. DPYN=(P(IJKN)-P(IJK))/DYPN
  1953. VN=VNL-APVN*VOLN*(DPYN-DPYNL)
  1954. F2(IJK)=D*VN
  1955. !
  1956. !.....COEFFICIENTS OF P' EQUATION, AN(P) AND AS(N)
  1957. !
  1958. AN(IJK)=-D*APVN*S
  1959. AS(IJKN)=AN(IJK)
  1960. !
  1961. END DO
  1962. END DO
  1963. END DO
  1964. !
  1965. END DO
  1966. !
  1967. !=============================================================
  1968. !.....TOP CV FACES (S - AREA, VOLT - VOLUME BETWEEN P AND T)
  1969. !=============================================================
  1970. ! 3D
  1971. !=========================================================
  1972. !.....FLUXES THROUGH INTERNAL TOP CV FACES
  1973. !=========================================================
  1974. ! F3(IJK) is the mass flux through the top face (outward
  1975. ! normal directed to T); FZ(K) is the ratio of distance
  1976. ! from P to cell face, to distance from P to T; IJK
  1977. ! denotes node P and IJKT node T.
  1978. ! Contribution of convective and diffusive fluxes from
  1979. ! top face to AT(P), AB(T), and source terms at both
  1980. ! P and T are calculated; contributions to AP(P) and
  1981. ! AP(T) come through the sum of neighbor coefficients
  1982. ! and are not explicitly calculated.
  1983. !----------------------------------------------------------
  1984. ! MPI for DPZ(IJK-NIJ)
  1985. !
  1986. ! MPI
  1987. !
  1988. ! MPI
  1989. ! BLK
  1990. DO B=1,3
  1991. !
  1992. IF (BZE(B).EQ.NKM) THEN
  1993. KE=BZE(B)-1
  1994. ELSE
  1995. KE=BZE(B)
  1996. END IF
  1997. !
  1998. DO K=BZS(B),KE
  1999. !
  2000. DZPT=ZC(K+1)-ZC(K)
  2001. FZT=FZ(K)
  2002. FZP=1.-FZT
  2003. !
  2004. DO J=BYS(B),BYE(B)
  2005. !
  2006. DO I=2,NIM
  2007. IJK =LK(K)+LI(I)+J
  2008. IJKT=IJK+NIJ
  2009. !
  2010. !.....CELL FACE AREA S = DX*RN*1
  2011. !
  2012. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  2013. VOLT=S*DZPT
  2014. D=DENSIT*S
  2015. ! NANO
  2016. D=DNA2*S
  2017. !
  2018. !.....INTERPOLATED CELL-FACE QUANTITIES (PRESSURE GRAD., U AND
  2019. ! 1/AP)
  2020. !
  2021. DPZTL=0.5*(DPZ(IJKT)+DPZ(IJK))
  2022. WTL=W(IJKT)*FZT+W(IJK)*FZP
  2023. APWT=APW(IJKT)*FZT+APW(IJK)*FZP
  2024. !
  2025. !.....CELL-FACE GRADIENT, VELOCITY AND MASS FLUX
  2026. !
  2027. DPZT=(P(IJKT)-P(IJK))/DZPT
  2028. WT=WTL-APWT*VOLT*(DPZT-DPZTL)
  2029. F3(IJK)=D*WT
  2030. !
  2031. !.....COEFFICIENTS OF P' EQUATION, AN(P) AND AS(N)
  2032. !
  2033. AT(IJK)=-D*APWT*S
  2034. AB(IJKT)=AT(IJK)
  2035. !
  2036. END DO
  2037. END DO
  2038. END DO
  2039. !
  2040. END DO
  2041. !
  2042. ! MPI for AB(IJK+NIJ)
  2043. !
  2044. !===============================================================
  2045. !.....BOUNDARY CONDITIONS: PRESCRIBED MASS FLUXES, ZERO
  2046. ! CORRECTION (EQUIVALENT TO ZERO NORMAL GRADIENT FOR P';
  2047. ! COEFFICIENT FOR THE BOUNDARY NODE IS ZERO, NO SPECIAL
  2048. ! TREATMENT REQUIRED).
  2049. !===============================================================
  2050. !
  2051. !==============================================================
  2052. !.....BOUNDARY FLUX
  2053. !==============================================================
  2054. !
  2055. !.....INLET BOUNDARIES (MASS FLUXES PRESCRIBED IN ROUTINE
  2056. ! 'BCIN')
  2057. ! BLK
  2058. DO I=2,NIM
  2059. DO J=BYS(1),NJM
  2060. IJ =LI(I)+J
  2061. IJK=LK(2)+LI(I)+J
  2062. SU(IJK)=SU(IJK)+FMI(IJ)
  2063. END DO
  2064. END DO
  2065. !
  2066. !.....EXTRAPOLATED VELOCITY AT OUTLET BOUNDARY, OUTLET MASS
  2067. ! FLUXES
  2068. ! OUTLET
  2069. ! BLK23
  2070. FLOWO=0.
  2071. !
  2072. DO I=2,NIM
  2073. DO J=2,NJM
  2074. !
  2075. IJ =LI(I) +J
  2076. IJK=LK(NKM)+LI(I)+J
  2077. !
  2078. U(IJK+NIJ)=U(IJK)
  2079. V(IJK+NIJ)=V(IJK)
  2080. W(IJK+NIJ)=W(IJK)
  2081. ! NANO
  2082. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  2083. FMO(IJ)=DNA2*S*W(IJK+NIJ)
  2084. FLOWO=FLOWO+FMO(IJ)
  2085. !
  2086. END DO
  2087. END DO
  2088. !
  2089. !.....CORRECT MASS FLUX TO SATISFY GLOBAL MASS CONSERVATION &
  2090. ! ADD TO SOURCE
  2091. ! OUTLET
  2092. ! BLK
  2093. FAC=FLOMAS/(FLOWO+SMALL)
  2094. !
  2095. DO I=2,NIM
  2096. DO J=2,NJM
  2097. !
  2098. IJ =LI(I) +J
  2099. IJK=LK(NKM)+LI(I)+J
  2100. !
  2101. FMO(IJ) =FMO(IJ) *FAC
  2102. !
  2103. U(IJK+NIJ)=U(IJK+NIJ)*FAC
  2104. V(IJK+NIJ)=V(IJK+NIJ)*FAC
  2105. W(IJK+NIJ)=W(IJK+NIJ)*FAC
  2106. !
  2107. SU(IJK)=SU(IJK)-FMO(IJ)
  2108. !
  2109. END DO
  2110. END DO
  2111. !
  2112. !===============================================================
  2113. !.....SORCE TERM AND COEFFICIENT OF NODE P
  2114. !===============================================================
  2115. !
  2116. ! MPI for F3(IJK-NIJ)
  2117. !
  2118. ! BLK
  2119. DO B=1,3
  2120. !
  2121. DO K=BZS(B),BZE(B)
  2122. !
  2123. DO I=2,NIM
  2124. !
  2125. DO J=BYS(B),BYE(B)
  2126. !
  2127. IJK=LK(K)+LI(I)+J
  2128. AP(IJK)=AP(IJK)-AE(IJK)-AW(IJK)-AN(IJK)-AS(IJK)-&
  2129. &AT(IJK)-AB(IJK)
  2130. SU(IJK)=SU(IJK)+F1(IJK-NJ)-F1(IJK)+F2(IJK-1)-F2(IJK)+&
  2131. &F3(IJK-NIJ)-F3(IJK)
  2132. SUM=SUM+SU(IJK)
  2133. PP(IJK)=0.
  2134. END DO
  2135. END DO
  2136. END DO
  2137. !
  2138. END DO
  2139.  
  2140. !
  2141. !===============================================================
  2142. !.....SOLVE EQUATIONS SYSTEM FOR P' AND APPLY CORRECTIONS
  2143. !===============================================================
  2144. !
  2145. ! MPI for PP(IJK+NIJ)
  2146. !
  2147. ! PRINT *,' SUM, FLOMAS, FLOWO = ',SUM,FLOMAS,FLOWO
  2148. ! PRINT *,' IJKMAX, U, V, W, TE, ED = ',&
  2149. ! &IJKMAX,U(IJKMAX),V(IJKMAX),W(IJKMAX),TE(IJKMAX),ED(IJKMAX)
  2150. !
  2151. CALL CGS(PP,IP)
  2152. !
  2153. !.....CALCULATE PRESSURE CORRECTION AT BOUNDARIES
  2154. !
  2155. ! MPI for PP(IJK+NIJ)
  2156. !
  2157. CALL PBOUND(PP,PPS1,PPB2)
  2158. !
  2159. !.....VALUE OF P' AT REFERENCE LOCATION TO BE SUBTRACTED FROM
  2160. ! ALL P'
  2161. !
  2162. IJPREF=LK(KPR)+LI(IPR)+JPR
  2163. IF(IJPREF.GT.(0).AND.IJPREF.LT.(NIJK+1)) THEN
  2164. PPO=PP(IJPREF)
  2165. END IF
  2166. !
  2167. !.....CORRECT EAST MASS FLUXES
  2168. !
  2169. ! BLK
  2170. DO B=1,3
  2171. !
  2172. DO K=BZS(B),BZE(B)
  2173. DO I=2,NIM-1
  2174. DO J=BYS(B),BYE(B)
  2175. IJK=LK(K)+LI(I)+J
  2176. F1(IJK)=F1(IJK)+AE(IJK)*(PP(IJK+NJ)-PP(IJK))
  2177. END DO
  2178. END DO
  2179. END DO
  2180. !
  2181. END DO
  2182.  
  2183. !
  2184. !.....CORRECT NORTH MASS FLUXES
  2185. !
  2186. ! BLK
  2187. DO B=1,3
  2188. !
  2189. DO K=BZS(B),BZE(B)
  2190. !
  2191. DO I=2,NIM
  2192. !
  2193. IF (BYE(B).EQ.NJM) THEN
  2194. JE=BYE(B)-1
  2195. ELSE
  2196. JE=BYE(B)
  2197. END IF
  2198. !
  2199. DO J=BYS(B),JE
  2200. IJK=LK(K)+LI(I)+J
  2201. F2(IJK)=F2(IJK)+AN(IJK)*(PP(IJK+1)-PP(IJK))
  2202. END DO
  2203. END DO
  2204. END DO
  2205. !
  2206. END DO
  2207. !
  2208. !.....CORRECT TOP MASS FLUXES
  2209. ! MPI for PP(IJK+NIJ)
  2210. ! BLK
  2211. DO B=1,3
  2212. !
  2213. IF (BZE(B).EQ.NKM) THEN
  2214. KE=BZE(B)-1
  2215. ELSE
  2216. KE=BZE(B)
  2217. END IF
  2218. !
  2219. DO K=BZS(B),KE
  2220. !
  2221. DO I=2,NIM
  2222. !
  2223. DO J=BYS(B),BYE(B)
  2224. IJK=LK(K)+LI(I)+J
  2225. F3(IJK)=F3(IJK)+AT(IJK)*(PP(IJK+NIJ)-PP(IJK))
  2226. END DO
  2227. END DO
  2228. END DO
  2229. !
  2230. END DO
  2231. !
  2232. !.....CORRECT PRESSURE AND VELOCITIES AT CELL CENTER
  2233. ! BLK
  2234. DO B=1,3
  2235. !
  2236. DO K=BZS(B),BZE(B)
  2237. DZ=Z(K)-Z(K-1)
  2238. !
  2239. DO I=2,NIM
  2240. DX=X(I)-X(I-1)
  2241. !
  2242. DO J=BYS(B),BYE(B)
  2243. DY=Y(J)-Y(J-1)
  2244. !
  2245. IJK=LK(K)+LI(I)+J
  2246. !
  2247. PPE=PP(IJK+NJ) *FX(I) +PP(IJK) *(1.-FX(I))
  2248. PPW=PP(IJK) *FX(I-1)+PP(IJK-NJ) *(1.-FX(I-1))
  2249. PPN=PP(IJK+1) *FY(J) +PP(IJK) *(1.-FY(J))
  2250. ! BLK
  2251. IF (B.EQ.1.AND.J.EQ.BYS(B)) THEN
  2252. IK=(K-1)*NI+I
  2253. PPS=PPS1(IK)
  2254. ELSE
  2255. PPS=PP(IJK)*FY(J-1)+PP(IJK-1)*(1.-FY(J-1))
  2256. END IF
  2257. !
  2258. PPT=PP(IJK+NIJ)*FZ(K) +PP(IJK) *(1.-FZ(K))
  2259. ! BLK
  2260. IF (B.EQ.2.AND.K.EQ.BZS(B)) THEN
  2261. IJ =(I-1)*NJ+J
  2262. PPB=PPB2(IJ)
  2263. ELSE
  2264. PPB=PP(IJK)*FZ(K-1)+PP(IJK-NIJ)*(1.-FZ(K-1))
  2265. END IF
  2266. !
  2267. U(IJK)=U(IJK)-(PPE-PPW)*DY*DZ*APU(IJK)
  2268. V(IJK)=V(IJK)-(PPN-PPS)*DX*DZ*APV(IJK)
  2269. W(IJK)=W(IJK)-(PPT-PPB)*DX*DY*APW(IJK)
  2270. P(IJK)=P(IJK)+URF(IP)*(PP(IJK)-PPO)
  2271. !
  2272. END DO
  2273. END DO
  2274. END DO
  2275. !
  2276. END DO
  2277. !
  2278. END SUBROUTINE CALCP
  2279. ! T
  2280. ! TURB
  2281. !###########################################################
  2282. SUBROUTINE CALCSC(FI,IFI)
  2283. !###########################################################
  2284. USE GLOBAL
  2285. IMPLICIT NONE
  2286. !
  2287. DOUBLE PRECISION, DIMENSION(1:NIJK), INTENT(INOUT) :: FI
  2288. INTEGER, INTENT(IN) :: IFI
  2289. !
  2290. DOUBLE PRECISION :: URFI
  2291. DOUBLE PRECISION :: FUDS,FCDS
  2292. ! LUD
  2293. DOUBLE PRECISION :: ALFFIE=0.,ALFFIN=0.,ALFFIT=0.
  2294. ! LUD
  2295. DOUBLE PRECISION :: FFILUD=0.
  2296. DOUBLE PRECISION :: SAIMFIE=0.,SAIMFIN=0.,SAIMFIT=0.
  2297. DOUBLE PRECISION :: SAIPFIE=0.,SAIPFIN=0.,SAIPFIT=0.
  2298. !----------------------------------------------------------
  2299. !
  2300. !.....INITIALIZATION OF TEMPORARILY STORED VARIABLES
  2301. !
  2302. DO IJK=1,NIJK
  2303. SU(IJK)=0.
  2304. AP(IJK)=0.
  2305. END DO
  2306. !
  2307. URFI=1./URF(IFI)
  2308. !
  2309. !==========================================================
  2310. !.....FLUXES THROUGH INTERNAL EAST CV-FACES
  2311. !==========================================================
  2312. ! 3D
  2313. ! BLK
  2314. DO B=1,3!MODE-A
  2315. !
  2316. DO K=BZS(B),BZE(B)!MODE-A
  2317. !
  2318. ! DO K=2,NKM,1!MODE-B
  2319. !
  2320. DO I=2,NIM-1,1
  2321. !
  2322. !.....INTERPOLATION FACTORS, DISTANCE FROM P TO E (SAME FOR ALL J)
  2323. !
  2324. FXE =FX(I)
  2325. FXP =1.-FXE
  2326. DXPE=XC(I+1)-XC(I)
  2327. ! 3D
  2328. DO J=BYS(B),BYE(B)!MODE-A
  2329. !
  2330. ! DO J=2,NJM!MODE-B
  2331. !
  2332. IJK=LK(K)+LI(I)+J
  2333. IJKE=IJK+NJ
  2334. !
  2335. !.....CELL FACE AREA S = DY*RE*1
  2336. !
  2337. S=(Y(J)-Y(J-1))*(Z(K)-Z(K-1))
  2338. !
  2339. !.....INTERPOLATED CELL FACE VALUES
  2340. ! TURB
  2341. VISI=VIS(IJKE)*FX(I)+VIS(IJK)*(1.-FX(I))-VISC
  2342. !
  2343. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  2344. ! TURB
  2345. IF(IFI.EQ.IEN) DCOEF=(VISC+VISI/SIGT)/PRANL
  2346. IF(IFI.EQ.ITE) DCOEF=VISC+VISI/SIGTE
  2347. IF(IFI.EQ.IED) DCOEF=VISC+VISI/SIGED
  2348. ! TURB
  2349. D=DCOEF*S/DXPE
  2350. ! NANO
  2351. DNA1=DCOEF/((1.-PHIS)**2.5)
  2352. D=DNA1*PRR*DNA3*S/DXPE
  2353. !
  2354. !.....EXPLICIT CONVECTIVE FLUX FOR UDS AND CDS
  2355. !
  2356. IF (F1(IJK).LT.0.) THEN
  2357. CE=F1(IJK)
  2358. ELSE
  2359. CE=0.
  2360. END IF
  2361. IF (F1(IJK).GT.0.) THEN
  2362. CP=F1(IJK)
  2363. ELSE
  2364. CP=0.
  2365. END IF
  2366. !
  2367. !.....LUD
  2368. ! LUD
  2369. FFILUD=0.
  2370. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  2371. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  2372. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  2373. !
  2374. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS
  2375. ! ALIFUW OF CELL IJE, SO, NO NEED TO REPEAT.
  2376. ! LUD
  2377. IF (F1(IJK).LT.0.) THEN
  2378. ALFFIE=0.
  2379. SAIMFIE=(FI(IJK+NJ+NJ)-FI(IJK+NJ))/&
  2380. &((FI(IJK+NJ)-FI(IJK))+SMALL)
  2381. END IF
  2382. ! LUD
  2383. IF (F1(IJK).GE.0.) THEN
  2384. ALFFIE=1.
  2385. SAIPFIE=(FI(IJK)-FI(IJK-NJ))/((FI(IJK+NJ)-FI(IJK))+SMALL)
  2386. END IF
  2387. ! LUD2
  2388. T1=(1.-ALFFIE)*SAIMFIE-ALFFIE*SAIPFIE
  2389. T2=FI(IJK+NJ)-FI(IJK)
  2390. FFILUD=0.5*F1(IJK)*T1*T2
  2391. ! LUD
  2392. END IF
  2393. END IF
  2394. END IF
  2395. ! TURB
  2396. FUDS=CP*FI(IJK)+CE*FI(IJKE)
  2397. FCDS=F1(IJK)*(FI(IJKE)*FXE+FI(IJK)*FXP)
  2398. !
  2399. !.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
  2400. !
  2401. AE(IJK) = CE-D
  2402. AW(IJKE)=-CP-D
  2403. !
  2404. !.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED
  2405. ! CORRECTION
  2406. ! TURB
  2407. ! LUD
  2408. SU(IJK) =SU(IJK) +GDS(IFI)*(FUDS-FCDS)+LFAC*FFILUD
  2409. SU(IJKE)=SU(IJKE)-GDS(IFI)*(FUDS-FCDS)-LFAC*FFILUD
  2410. END DO
  2411. END DO
  2412. END DO
  2413. !
  2414. END DO!MODE-A
  2415. !
  2416. !=========================================================
  2417. !.....FLUXES THROUGH INTERNAL NORTH CV FACES
  2418. !=========================================================
  2419. ! 3D
  2420. ! BLK
  2421. DO B=1,3!MODE-A
  2422. !
  2423. DO K=BZS(B),BZE(B)!MODE-A
  2424. !
  2425. ! DO K=2,NKM!MODE-B
  2426. !
  2427. IF (BYE(B).EQ.NJM) THEN!MODE-A
  2428. JE=BYE(B)-1!MODE-A
  2429. ELSE!MODE-A
  2430. JE=BYE(B)!MODE-A
  2431. END IF!MODE-A
  2432. !
  2433. DO J=BYS(B),JE!MODE-A
  2434. !
  2435. ! DO J=2,NJM-1,1!MODE-B
  2436. !
  2437. !.....INTERPOLATION FACTORS, DISTANCE FROM P TO N (SAME FOR ALL J)
  2438. !
  2439. FYN =FY(J)
  2440. FYP =1.-FYN
  2441. DYPN=YC(J+1)-YC(J)
  2442. !
  2443. DO I=2,NIM,1
  2444. IJK =LK(K)+LI(I)+J
  2445. IJKN=IJK+1
  2446. !
  2447. !.....CELL FACE AREA S = DX*RN*1
  2448. !
  2449. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  2450. !
  2451. !.....INTERPOLATED CELL FACE VALUES
  2452. ! TURB
  2453. VISI=VIS(IJKN)*FY(J)+VIS(IJK)*(1.-FY(J))-VISC
  2454. !
  2455. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  2456. ! TURB
  2457. IF(IFI.EQ.IEN) DCOEF=(VISC+VISI/SIGT)/PRANL
  2458. IF(IFI.EQ.ITE) DCOEF=VISC+VISI/SIGTE
  2459. IF(IFI.EQ.IED) DCOEF=VISC+VISI/SIGED
  2460. !
  2461. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
  2462. ! TURB
  2463. D=DCOEF*S/DYPN
  2464. ! NANO
  2465. DNA1=DCOEF/((1.-PHIS)**2.5)
  2466. D=DNA1*PRR*DNA3*S/DYPN
  2467. !
  2468. !.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
  2469. !
  2470. IF (F2(IJK).LT.0.) THEN
  2471. CN=F2(IJK)
  2472. ELSE
  2473. CN=0.
  2474. END IF
  2475. IF (F2(IJK).GT.0.) THEN
  2476. CP=F2(IJK)
  2477. ELSE
  2478. CP=0.
  2479. END IF
  2480. !
  2481. !.....LUD
  2482. ! LUD
  2483. FFILUD=0.
  2484. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  2485. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  2486. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  2487. !
  2488. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS
  2489. ! ALIFUW OF CELL IJN, SO, NO NEED TO REPEAT.
  2490. ! LUD
  2491. IF (F2(IJK).LT.0.) THEN
  2492. ALFFIN=0.
  2493. SAIMFIN=(FI(IJK+1+1)-FI(IJK+1))/&
  2494. &((FI(IJK+1)-FI(IJK))+SMALL)
  2495. END IF
  2496. ! LUD
  2497. IF (F2(IJK).GE.0.) THEN
  2498. ALFFIN=1.
  2499. SAIPFIN=(FI(IJK)-FI(IJK-1))/((FI(IJK+1)-FI(IJK))+SMALL)
  2500. END IF
  2501. ! LUD2
  2502. T1=(1.-ALFFIN)*SAIMFIN-ALFFIN*SAIPFIN
  2503. T2=FI(IJK+1)-FI(IJK)
  2504. FFILUD=0.5*F2(IJK)*T1*T2
  2505. ! LUD
  2506. END IF
  2507. END IF
  2508. END IF
  2509. ! TURB
  2510. FUDS=CP*FI(IJK)+CN*FI(IJKN)
  2511. FCDS=F2(IJK)*(FI(IJKN)*FYN+FI(IJK)*FYP)
  2512. !
  2513. !.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
  2514. !
  2515. AN(IJK) = CN-D
  2516. AS(IJKN)=-CP-D
  2517. !
  2518. !.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED
  2519. ! CORRECTION
  2520. ! TURB
  2521. ! LUD
  2522. SU(IJK) =SU(IJK) +GDS(IFI)*(FUDS-FCDS)+LFAC*FFILUD
  2523. SU(IJKN)=SU(IJKN)-GDS(IFI)*(FUDS-FCDS)-LFAC*FFILUD
  2524. !
  2525. END DO
  2526. END DO
  2527. END DO
  2528. !
  2529. END DO!MODE-A
  2530. !
  2531. !=========================================================
  2532. !.....FLUXES THROUGH INTERNAL TOP CV FACES
  2533. !=========================================================
  2534. ! F3(IJK) is the mass flux through the top face (outward
  2535. ! normal directed to T); FZ(K) is the ratio of distance
  2536. ! from P to cell face, to distance from P to T; IJK
  2537. ! denotes node P and IJKT node T.
  2538. ! Contribution of convective and diffusive fluxes from
  2539. ! top face to AT(P), AB(T), and source terms at both
  2540. ! P and T are calculated; contributions to AP(P) and
  2541. ! AP(T) come through the sum of neighbor coefficients
  2542. ! and are not explicitly calculated.
  2543. !----------------------------------------------------------
  2544. ! 3D
  2545. ! BLK
  2546. DO B=1,3!MODE-A
  2547. !
  2548. IF (BZE(B).EQ.NKM) THEN!MODE-A
  2549. KE=BZE(B)-1!MODE-A
  2550. ELSE!MODE-A
  2551. KE=BZE(B)!MODE-A
  2552. END IF!MODE-A
  2553. !
  2554. DO K=BZS(B),KE!MODE-A
  2555. !
  2556. ! DO K=2,NKM-1!MODE-B
  2557. !
  2558. FZT=FZ(K)
  2559. FZP=1.-FZT
  2560. DZPT=ZC(K+1)-ZC(K)
  2561. !
  2562. DO J=BYS(B),BYE(B)!MODE-A
  2563. !
  2564. ! DO J=2,NJM!MODE-B
  2565. !
  2566. DO I=2,NIM
  2567. IJK =LK(K)+LI(I)+J
  2568. IJKT=IJK+NIJ
  2569. !
  2570. !.....CELL FACE AREA S = DX*RN*1
  2571. !
  2572. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  2573. !
  2574. !.....INTERPOLATED CELL FACE VALUES
  2575. ! TURB
  2576. VISI=VIS(IJKT)*FZ(K)+VIS(IJK)*(1.-FZ(K))-VISC
  2577. !
  2578. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  2579. ! TURB
  2580. IF(IFI.EQ.IEN) DCOEF=(VISC+VISI/SIGT)/PRANL
  2581. IF(IFI.EQ.ITE) DCOEF=VISC+VISI/SIGTE
  2582. IF(IFI.EQ.IED) DCOEF=VISC+VISI/SIGED
  2583. !
  2584. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
  2585. ! TURB
  2586. D=DCOEF*S/DZPT
  2587. ! NANO
  2588. DNA1=DCOEF/((1.-PHIS)**2.5)
  2589. D=DNA1*PRR*DNA3*S/DZPT
  2590. !
  2591. !.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
  2592. !
  2593. IF (F3(IJK).LT.0.) THEN
  2594. CT=F3(IJK)
  2595. ELSE
  2596. CT=0.
  2597. END IF
  2598. IF (F3(IJK).GT.0.) THEN
  2599. CP=F3(IJK)
  2600. ELSE
  2601. CP=0.
  2602. END IF
  2603. !
  2604. !.....LUD
  2605. ! LUD
  2606. FFILUD=0.
  2607. IF (I.GT.2.AND.I.LT.NIM-1) THEN
  2608. IF (J.GT.2.AND.J.LT.NJM-1) THEN
  2609. IF (K.GT.2.AND.K.LT.NKM-1) THEN
  2610. !
  2611. !.....EQS 5.83, VERSTEEG & MALALASEKERA. ALIFUE OF CELL IJ IS
  2612. ! ALIFUW OF CELL !IJN, SO, NO NEED TO REPEAT.
  2613. ! LUD
  2614. IF (F3(IJK).LT.0.) THEN
  2615. ALFFIT=0.
  2616. SAIMFIT=(FI(IJK+NIJ+NIJ)-FI(IJK+NIJ))/&
  2617. &((FI(IJK+NIJ)-FI(IJK))+SMALL)
  2618. END IF
  2619. ! LUD
  2620. IF (F3(IJK).GE.0.) THEN
  2621. ALFFIT=1.
  2622. SAIPFIT=(FI(IJK)-FI(IJK-NIJ))/&
  2623. &((FI(IJK+NIJ)-FI(IJK))+SMALL)
  2624. END IF
  2625. ! LUD
  2626. T1=(1.-ALFFIT)*SAIMFIT-ALFFIT*SAIPFIT
  2627. T2=FI(IJK+NIJ)-FI(IJK)
  2628. FFILUD=0.5*F3(IJK)*T1*T2
  2629. ! LUD
  2630. END IF
  2631. END IF
  2632. END IF
  2633. ! TURB
  2634. FUDS=CP*FI(IJK)+CT*FI(IJKT)
  2635. FCDS=F3(IJK)*(FI(IJKT)*FZT+FI(IJK)*FZP)
  2636. !
  2637. !.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
  2638. !
  2639. AT(IJK) = CT-D
  2640. AB(IJKT)=-CP-D
  2641. !
  2642. !.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED
  2643. ! CORRECTION
  2644. ! TURB
  2645. ! LUD
  2646. SU(IJK) =SU(IJK) +GDS(IFI)*(FUDS-FCDS)+LFAC*FFILUD
  2647. SU(IJKT)=SU(IJKT)-GDS(IFI)*(FUDS-FCDS)-LFAC*FFILUD
  2648. !
  2649. END DO
  2650. END DO
  2651. END DO
  2652. !
  2653. END DO!MODE-A
  2654. !
  2655. !=============================================================
  2656. !.....VOLUME INTEGRALS (SOURCE TERMS)
  2657. !=============================================================
  2658. !
  2659. !
  2660. !.....BOTTOM BOUNDARY (ISOTHERMAL INLET)
  2661. ! INLET
  2662. ! BLK1
  2663. DO I=2,NIM
  2664. DO J=BYS(1),NJM
  2665. !
  2666. IJ =LI(I)+J
  2667. IJK=LK(2)+LI(I)+J
  2668. !
  2669. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  2670. ! D=VISC*PRR*S/(ZC(2)-ZC(1))
  2671. !
  2672. !.....INTERPOLATED CELL FACE VALUES. VIS(IJK-NIJ)
  2673. ! VALUES SET IN MAIN PROGRAM ABOVE
  2674. ! TURB
  2675. VISI=VIS(IJK-NIJ)-VISC
  2676. !
  2677. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  2678. ! TURB
  2679. IF(IFI.EQ.IEN) DCOEF=(VISC+VISI/SIGT)/PRANL
  2680. IF(IFI.EQ.ITE) DCOEF=VISC+VISI/SIGTE
  2681. IF(IFI.EQ.IED) DCOEF=VISC+VISI/SIGED
  2682. !
  2683. D=DCOEF*S/(ZC(2)-ZC(1))
  2684. ! NANO
  2685. DNA1=DCOEF/((1.-PHIS)**2.5)
  2686. D=DNA1*DNA3*S/(ZC(2)-ZC(1))
  2687. ! NANO
  2688. IF(IFI.EQ.IEN) D=DNA1*DNA3*S/(ZC(2)-ZC(1))
  2689. IF(IFI.EQ.ITE) D=DNA1*S/(ZC(2)-ZC(1))
  2690. IF(IFI.EQ.IED) D=DNA1*S/(ZC(2)-ZC(1))
  2691. !
  2692. IF (FMI(IJ).GT.0.) THEN
  2693. CP=FMI(IJ)
  2694. ELSE
  2695. CP=0.
  2696. END IF
  2697. !
  2698. CB=-D-CP
  2699. ! TURB
  2700. AP(IJK)=AP(IJK)-CB
  2701. SU(IJK)=SU(IJK)-CB*FI(IJK-NIJ)
  2702. !
  2703. END DO
  2704. END DO
  2705. !
  2706. !.....OUTLET (TOP) BOUNDARIES (CONSTANT GRADIENT BETWEEN
  2707. ! BOUNDARY & CV-CENTER ASSUMED). SHEAR FORCE IN X,Y-DIR,
  2708. ! NORMAL FORCE IN Z-DIR).
  2709. ! 3D
  2710. ! OUTLET
  2711. ! BLK23
  2712. DO I=2,NIM
  2713. DO J=2,NJM
  2714. IJ =LI(I)+J
  2715. IJK=LK(NKM)+LI(I)+J
  2716. !
  2717. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  2718. ! D=VISC*PRR*S/(ZC(NK)-ZC(NKM))
  2719. !
  2720. !.....INTERPOLATED CELL FACE VALUES. VIS(IJK+NIJ)
  2721. ! VALUES SET IN MAIN PROGRAM ABOVE (INITIAL
  2722. ! VARIABLE VALUES)
  2723. ! TURB
  2724. VISI=VIS(IJK+NIJ)-VISC
  2725. !
  2726. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  2727. ! TURB
  2728. IF(IFI.EQ.IEN) DCOEF=(VISC+VISI/SIGT)/PRANL
  2729. IF(IFI.EQ.ITE) DCOEF=VISC+VISI/SIGTE
  2730. IF(IFI.EQ.IED) DCOEF=VISC+VISI/SIGED
  2731. !
  2732. D=DCOEF*S/(ZC(NK)-ZC(NKM))
  2733. !
  2734. IF (FMO(IJ).LE.0.) THEN
  2735. CT=FMO(IJ)
  2736. ELSE
  2737. CT=0.
  2738. END IF
  2739. !
  2740. CB=-D+CT
  2741. ! TURB
  2742. AP(IJK)=AP(IJK)-CB
  2743. SU(IJK)=SU(IJK)-CB*FI(IJK+NIJ)
  2744. !
  2745. END DO
  2746. END DO
  2747. !
  2748. !=============================================================
  2749. !.....PROBLEM MODIFICATIONS - BOUNDARY CONDITIONS
  2750. !=============================================================
  2751. ! TURB
  2752. !.....WALL BOUNDARY CONDITIONS AND SOURCES FOR TEMPERATURE
  2753. !
  2754. IF(IFI.EQ.IEN) CALL BCT
  2755. ! TURB
  2756. !.....WALL BOUNDARY CONDITIONS AND SOURCES FOR TURB. KIN. ENRGY
  2757. !
  2758. IF(IFI.EQ.ITE) CALL KINE
  2759. ! TURB
  2760. !.....WALL BOUNDARY CONDITIONS AND SOURCES FOR DISSIPATION RATE
  2761. !
  2762. IF(IFI.EQ.IED) CALL DISE
  2763. !
  2764. !==============================================================
  2765. !.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR TEMPERATURE
  2766. !==============================================================
  2767. ! 3D
  2768. ! BLK
  2769. DO B=1,3
  2770. !
  2771. DO K=BZS(B),BZE(B)
  2772. !
  2773. DO I=2,NIM
  2774. !
  2775. DO J=BYS(B),BYE(B)
  2776. !
  2777. IJK=LK(K)+LI(I)+J
  2778. AP(IJK)=(AP(IJK)-AW(IJK)-AE(IJK)-AN(IJK)-AS(IJK)-&
  2779. &AT(IJK)-AB(IJK))*URFI
  2780. SU(IJK)=SU(IJK)+(1.-URF(IFI))*AP(IJK)*FI(IJK)
  2781. END DO
  2782. END DO
  2783. END DO
  2784. !
  2785. END DO
  2786. !
  2787. CALL CGSTAB(FI,IFI)
  2788. !
  2789. !.....TOP BOUNDARY (OUTLET)
  2790. ! OUTLET
  2791. ! BLK23
  2792. DO I=2,NIM
  2793. DO J=2,NJM
  2794. IJK=LK(NK)+LI(I)+J
  2795. FI(IJK)=FI(IJK-NIJ)
  2796. END DO
  2797. END DO
  2798. !
  2799. END SUBROUTINE CALCSC
  2800. ! MPI
  2801. !###############################################################
  2802. SUBROUTINE CGSTAB(FI,IFI)
  2803. !###############################################################
  2804. ! This routine incorporates the CGSTAB solver for seven-
  2805. ! diagonal, non-symmetric coefficient matrices (suitable for
  2806. ! convection/diffusion problems). See Sect. 5.3.7 for
  2807. ! details. Array index IJK calculated from indices I, J, and
  2808. ! K according to Table 3.1.
  2809. !---------------------------------------------------------------
  2810. USE GLOBAL
  2811. IMPLICIT NONE
  2812. ! MPI
  2813. !
  2814. ! 3D
  2815. ! MPI
  2816. DOUBLE PRECISION, DIMENSION(1:NIJK), INTENT(INOUT) :: FI
  2817. INTEGER, INTENT(IN) :: IFI
  2818. ! 3D
  2819. ! MPI
  2820. INTEGER :: L
  2821. DOUBLE PRECISION :: ALF,RES0,BET,RESL,RSM
  2822. DOUBLE PRECISION :: BETO,GAM,OMG,UKRESO,VRES,VV
  2823. ! 3D
  2824. DOUBLE PRECISION :: DD(1:NIJK)
  2825. DOUBLE PRECISION :: PK(1:NIJK),ZK(1:NIJK),RES(1:NIJK)
  2826. DOUBLE PRECISION :: RESO(1:NIJK),UK(1:NIJK),VK(1:NIJK)
  2827. !---------------------------------------------------------------
  2828. ! RESMAX=1.E-10
  2829. !
  2830. !.....CALCULATE INITIAL RESIDUAL VECTOR
  2831. ! MPI
  2832. RES0=0.
  2833. ! BLK
  2834. DO B=1,3
  2835. DO K=BZS(B),BZE(B)
  2836. DO I=2,NIM
  2837. DO J=BYS(B),BYE(B)
  2838. IJK=LK(K)+LI(I)+J
  2839. RES(IJK)=SU(IJK) - AP(IJK)*FI(IJK)-&
  2840. &AE(IJK)*FI(IJK+NJ) - AW(IJK)*FI(IJK-NJ) -&
  2841. &AN(IJK)*FI(IJK+1) - AS(IJK)*FI(IJK-1) -&
  2842. &AT(IJK)*FI(IJK+NIJ)- AB(IJK)*FI(IJK-NIJ)
  2843. RES0=RES0+ABS(RES(IJK))
  2844. END DO
  2845. END DO
  2846. END DO
  2847. END DO
  2848. !
  2849. !.....CALCULATE ELEMENTS OF PRECONDITIONING MATRIX DIAGONAL
  2850. !
  2851. ! DO K=2,NKM
  2852. ! DO I=2,NIM
  2853. ! DO J=2,NJM
  2854. ! IJK=LK(K)+LI(I)+J
  2855. ! DD(IJK)=1./(AP(IJK)-AW(IJK)*DD(IJK-NJ) *AE(IJK-NJ)-&
  2856. ! &AS(IJK)*DD(IJK-1) *AN(IJK-1)-&
  2857. ! &AB(IJK)*DD(IJK-NIJ)*AT(IJK-NIJ))
  2858. ! END DO
  2859. ! END DO
  2860. ! END DO
  2861. !
  2862. !.....INITIALIZE WORKING ARRAYS AND CONSTANTS
  2863. ! MPI
  2864. DO K=2,NKM
  2865. DO I=2,NIM
  2866. DO J=2,NJM
  2867. IJK=LK(K)+LI(I)+J
  2868. RESO(IJK)=RES(IJK)
  2869. PK(IJK)=0.
  2870. UK(IJK)=0.
  2871. ZK(IJK)=0.
  2872. VK(IJK)=0.
  2873. END DO
  2874. END DO
  2875. END DO
  2876. ALF=1.
  2877. BETO=1.
  2878. GAM=1.
  2879. !
  2880. !.....START INNER ITERATIONS
  2881. !
  2882. DO L=1,NSW(IFI)
  2883. !
  2884. !..... CALCULATE BETA AND OMEGA
  2885. ! MPI
  2886. BET=0.
  2887. ! BLK
  2888. DO B=1,3
  2889. DO K=BZS(B),BZE(B)
  2890. DO I=2,NIM
  2891. DO J=BYS(B),BYE(B)
  2892. IJK=LK(K)+LI(I)+J
  2893. BET=BET+RES(IJK)*RESO(IJK)
  2894. END DO
  2895. END DO
  2896. END DO
  2897. END DO
  2898. !
  2899. ! MPI. NEED TO SUM UP BET
  2900. !
  2901. OMG=BET*GAM/(ALF*BETO+1.E-30)
  2902. BETO=BET
  2903. !
  2904. !..... CALCULATE PK
  2905. ! MPI
  2906. ! BLK
  2907. DO B=1,3
  2908. DO K=BZS(B),BZE(B)
  2909. DO I=2,NIM
  2910. DO J=BYS(B),BYE(B)
  2911. IJK=LK(K)+LI(I)+J
  2912. PK(IJK)=RES(IJK)+OMG*(PK(IJK)-ALF*UK(IJK))
  2913. END DO
  2914. END DO
  2915. END DO
  2916. END DO
  2917. !
  2918. !.....SOLVE (M ZK = PK) - FORWARD SUBSTITUTION
  2919. !
  2920. ! DO K=2,NKM
  2921. ! DO I=2,NIM
  2922. ! DO J=2,NJM
  2923. ! IJK=LK(K)+LI(I)+J
  2924. ! ZK(IJK)=(PK(IJK)-AW(IJK)*ZK(IJK-NJ)-&
  2925. ! &AS(IJK)*ZK(IJK-1)-&
  2926. ! &AB(IJK)*ZK(IJK-NI*NJ))*DD(IJK)
  2927. ! END DO
  2928. ! END DO
  2929. ! END DO
  2930. !
  2931. ! DO K=2,NKM
  2932. ! DO I=2,NIM
  2933. ! DO J=2,NJM
  2934. ! IJK=LK(K)+LI(I)+J
  2935. ! ZK(IJK)=ZK(IJK)/(DD(IJK)+1.E-30)
  2936. ! END DO
  2937. ! END DO
  2938. ! END DO
  2939. !
  2940. !.....BACKWARD SUBSTITUTION
  2941. ! MPI
  2942. ! BLK
  2943. DO B=1,3
  2944. DO K=BZE(B),BZS(B),-1
  2945. DO I=NIM,2,-1
  2946. DO J=BYE(B),BYS(B),-1
  2947. IJK=LK(K)+LI(I)+J
  2948. ! ZK(IJK)=(ZK(IJK)-AE(IJK)*ZK(IJK+NJ)-&
  2949. ! &AN(IJK)*ZK(IJK+1)-&
  2950. ! &AT(IJK)*ZK(IJK+NIJ))*DD(IJK)
  2951. ZK(IJK)=RESO(IJK)
  2952. END DO
  2953. END DO
  2954. END DO
  2955. END DO
  2956. ! DEBUG
  2957. !.....CALCULATE UK = A.PK
  2958. ! MPI for ZK(IJK+NIJ)
  2959. !
  2960. ! MPI for ZK(IJK-NIJ)
  2961. !
  2962. !.....WEST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  2963. ! MPI
  2964. ! PERI CLEARED FOR PREX
  2965. !
  2966. !.....EAST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  2967. ! MPI
  2968. ! PERI CLEARED FOR PREX
  2969. !
  2970. ! MPI
  2971. !
  2972. ! BLK
  2973. DO B=1,3
  2974. DO K=BZS(B),BZE(B)
  2975. DO I=2,NIM
  2976. DO J=BYS(B),BYE(B)
  2977. IJK=LK(K)+LI(I)+J
  2978. UK(IJK)=AP(IJK)*ZK(IJK) +AE(IJK)*ZK(IJK+NJ)+&
  2979. &AW(IJK)*ZK(IJK-NJ)+AN(IJK)*ZK(IJK+1)+&
  2980. &AS(IJK)*ZK(IJK-1) +AT(IJK)*ZK(IJK+NIJ)+&
  2981. &AB(IJK)*ZK(IJK-NIJ)
  2982. END DO
  2983. END DO
  2984. END DO
  2985. END DO
  2986. !
  2987. !.....CALCULATE SCALAR PRODUCT UK.RESO AND GAMMA
  2988. ! MPI
  2989. UKRESO=0.
  2990. ! BLK
  2991. DO B=1,3
  2992. DO K=BZS(B),BZE(B)
  2993. DO I=2,NIM
  2994. DO J=BYS(B),BYE(B)
  2995. IJK=LK(K)+LI(I)+J
  2996. UKRESO=UKRESO+UK(IJK)*RESO(IJK)
  2997. END DO
  2998. END DO
  2999. END DO
  3000. END DO
  3001. !
  3002. ! MPI. NEED TO SUM UP UKRESO
  3003. !
  3004. GAM=BET/(UKRESO+1.E-30)
  3005. !
  3006. ! PRINT *,'L,IFI,GAM,BET,UKRESO=',L,IFI,GAM,BET,UKRESO
  3007. !
  3008. !
  3009. !.....UPDATE (FI) AND CALCULATE W (OVERWRITE RES - IT IS RES-
  3010. ! UPDATE)
  3011. ! MPI
  3012. ! BLK
  3013. DO B=1,3
  3014. DO K=BZS(B),BZE(B)
  3015. DO I=2,NIM
  3016. DO J=BYS(B),BYE(B)
  3017. IJK=LK(K)+LI(I)+J
  3018. FI(IJK)=FI(IJK)+GAM*ZK(IJK)
  3019. RES(IJK)=RES(IJK)-GAM*UK(IJK)
  3020. END DO
  3021. END DO
  3022. END DO
  3023. END DO
  3024. !
  3025. !.....SOLVE (M Y = W); Y OVERWRITES ZK; FORWARD SUBSTITUTION
  3026. !
  3027. ! DO K=2,NKM
  3028. ! DO I=2,NIM
  3029. ! DO J=2,NJM
  3030. ! IJK=LK(K)+LI(I)+J
  3031. ! ZK(IJK)=(RES(IJK)-AW(IJK)*ZK(IJK-NJ)-&
  3032. ! &AS(IJK)*ZK(IJK-1)-&
  3033. ! &AB(IJK)*ZK(IJK-NIJ))*DD(IJK)
  3034. ! END DO
  3035. ! END DO
  3036. ! END DO
  3037. !
  3038. ! DO K=2,NKM
  3039. ! DO I=2,NIM
  3040. ! DO J=2,NJM
  3041. ! IJK=LK(K)+LI(I)+J
  3042. ! ZK(IJK)=ZK(IJK)/(DD(IJK)+1.E-30)
  3043. ! END DO
  3044. ! END DO
  3045. ! END DO
  3046. !
  3047. !.....BACKWARD SUBSTITUTION
  3048. ! MPI
  3049. ! BLK
  3050. DO B=1,3
  3051. DO K=BZE(B),BZS(B),-1
  3052. DO I=NIM,2,-1
  3053. DO J=BYE(B),BYS(B),-1
  3054. IJK=LK(K)+LI(I)+J
  3055. ! ZK(IJK)=(ZK(IJK)-AE(IJK)*ZK(IJK+NJ)-&
  3056. ! &AN(IJK)*ZK(IJK+1)-&
  3057. ! &AT(IJK)*ZK(IJK+NIJ))*DD(IJK)
  3058. ZK(IJK)=RES(IJK)
  3059. END DO
  3060. END DO
  3061. END DO
  3062. END DO
  3063. !
  3064. !.....CALCULATE V = A.Y (VK = A.ZK)
  3065. ! MPI for ZK(IJK+NIJ)
  3066. !
  3067. ! MPI for ZK(IJK-NIJ)
  3068. !
  3069. ! MPI
  3070. !
  3071. !.....WEST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  3072. ! MPI
  3073. ! PERI CLEARED FOR PREX
  3074. !
  3075. !.....EAST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  3076. ! MPI
  3077. ! PERI CLEARED FOR PREX
  3078. !
  3079. ! MPI
  3080. ! BLK
  3081. DO B=1,3
  3082. DO K=BZS(B),BZE(B)
  3083. DO I=2,NIM
  3084. DO J=BYS(B),BYE(B)
  3085. IJK=LK(K)+LI(I)+J
  3086. VK(IJK)=AP(IJK)*ZK(IJK) +AE(IJK)*ZK(IJK+NJ)+&
  3087. &AW(IJK)*ZK(IJK-NJ) +AN(IJK)*ZK(IJK+1)+&
  3088. &AS(IJK)*ZK(IJK-1) +AT(IJK)*ZK(IJK+NIJ)+&
  3089. &AB(IJK)*ZK(IJK-NIJ)
  3090. END DO
  3091. END DO
  3092. END DO
  3093. END DO
  3094. !
  3095. !.....CALCULATE ALPHA (ALF)
  3096. ! MPI
  3097. VRES=0.
  3098. VV=0.
  3099. ! BLK
  3100. DO B=1,3
  3101. DO K=BZS(B),BZE(B)
  3102. DO I=2,NIM
  3103. DO J=BYS(B),BYE(B)
  3104. IJK=LK(K)+LI(I)+J
  3105. VRES=VRES+VK(IJK)*RES(IJK)
  3106. VV=VV+VK(IJK)*VK(IJK)
  3107. END DO
  3108. END DO
  3109. END DO
  3110. END DO
  3111. !
  3112. ! MPI. NEED TO SUM UP UKRESO
  3113. !
  3114. ALF=VRES/(VV+1.E-30)
  3115. !
  3116. !.....UPDATE VARIABLE (FI) AND RESIDUAL (RES) VECTORS
  3117. ! MPI
  3118. RESL=0.
  3119. ! BLK
  3120. DO B=1,3
  3121. DO K=BZS(B),BZE(B)
  3122. DO I=2,NIM
  3123. DO J=BYS(B),BYE(B)
  3124. IJK=LK(K)+LI(I)+J
  3125. FI(IJK)=FI(IJK)+ALF*ZK(IJK)
  3126. RES(IJK)=RES(IJK)-ALF*VK(IJK)
  3127. RESL=RESL+ABS(RES(IJK))
  3128. END DO
  3129. END DO
  3130. END DO
  3131. END DO
  3132. !
  3133. !....CHECK CONVERGENCE
  3134. !MPI
  3135. IF (L.EQ.1) THEN
  3136. RESOR(IFI)=RES0
  3137. END IF
  3138. !
  3139. !MPI
  3140. !
  3141. RSM=RESL/(RESOR(IFI)+1.E-20)
  3142. IF (RSM.LT.SOR(IFI)) RETURN
  3143. !
  3144. !.....END OF ITERATION LOOP
  3145. !
  3146. END DO
  3147. !
  3148. END SUBROUTINE CGSTAB
  3149. !
  3150. !###############################################################
  3151. SUBROUTINE CGS(FI,IFI)
  3152. !###############################################################
  3153. ! This routine incorporates the Incomplete Cholesky
  3154. ! preconditioned Conjugate Gradient solver for symmetric
  3155. ! matrices in 3D problems with seven-diagonal matrix
  3156. ! structure (see Sect. 5.3.6). Array index IJK converted from
  3157. ! 3D indices I, J, and K according to Table 3.1. NS is the
  3158. ! number of inner iterations (sweeps).
  3159. !---------------------------------------------------------------
  3160. USE GLOBAL
  3161. IMPLICIT NONE
  3162. ! MPI
  3163. ! 3D
  3164. ! MPI
  3165. DOUBLE PRECISION, DIMENSION(1:NIJK), INTENT(INOUT) :: FI
  3166. INTEGER, INTENT(IN) :: IFI
  3167. ! 3D
  3168. ! MPI
  3169. INTEGER :: L
  3170. DOUBLE PRECISION :: ALF,RES0,S0,SK,BET
  3171. DOUBLE PRECISION :: RSM,PKAPK,RESL
  3172. ! 3D
  3173. DOUBLE PRECISION :: DD(1:NIJK)
  3174. DOUBLE PRECISION :: PK(1:NIJK),ZK(1:NIJK),RES(1:NIJK)
  3175. !---------------------------------------------------------------
  3176. !
  3177. !.....INITALIZE WORKING ARRAYS
  3178. ! MPI
  3179. DO K=1,NK
  3180. DO I=1,NI
  3181. DO J=1,NJ
  3182. IJK=LK(K)+LI(I)+J
  3183. PK(IJK)=0.
  3184. ZK(IJK)=0.
  3185. ! DD(IJK)=0.
  3186. RES(IJK)=0.
  3187. END DO
  3188. END DO
  3189. END DO
  3190. !
  3191. !.....CALCULATE INITIAL RESIDUAL VECTOR AND THE NORM
  3192. ! MPI
  3193. RES0=0.
  3194. ! BLK
  3195. DO B=1,3
  3196. DO K=BZS(B),BZE(B)
  3197. DO I=2,NIM
  3198. DO J=BYS(B),BYE(B)
  3199. IJK=LK(K)+LI(I)+J
  3200. RES(IJK)=SU(IJK)-AE(IJK)*FI(IJK+NJ)-&
  3201. &AW(IJK)*FI(IJK-NJ) -AN(IJK)*FI(IJK+1)-&
  3202. &AS(IJK)*FI(IJK-1) -AT(IJK)*FI(IJK+NIJ)-&
  3203. &AB(IJK)*FI(IJK-NIJ)-AP(IJK)*FI(IJK)
  3204. RES0=RES0+ABS(RES(IJK))
  3205. END DO
  3206. END DO
  3207. END DO
  3208. END DO
  3209. !
  3210. !.....CALCULATE ELEMENTS OF DIAGONAL PRECONDITIONING MATRIX
  3211. !
  3212. ! DO K=2,NKM
  3213. ! DO I=2,NIM
  3214. ! DO J=2,NJM
  3215. ! IJK=LK(K)+LI(I)+J
  3216. ! DD(IJK)=1./(AP(IJK)-AW(IJK)**2*DD(IJK-NJ)-&
  3217. ! &AS(IJK)**2*DD(IJK-1)-&
  3218. ! &AB(IJK)**2*DD(IJK-NI*NJ))
  3219. ! END DO
  3220. ! END DO
  3221. ! END DO
  3222. !
  3223. S0=1.E20
  3224. !
  3225. !....START INNER ITERATIONS
  3226. !
  3227. DO L=1,NSW(IFI)
  3228. !
  3229. !.....SOLVE FOR ZK(IJK) -- FORWARD SUBSTITUTION
  3230. !MPI
  3231. ! DO K=2,NKM
  3232. ! DO I=2,NIM
  3233. ! DO J=2,NJM
  3234. ! IJK=LK(K)+LI(I)+J
  3235. ! ZK(IJK)=(RES(IJK)-AW(IJK)*ZK(IJK-NJ)-&
  3236. ! &AS(IJK)*ZK(IJK-1)-&
  3237. ! &AB(IJK)*ZK(IJK-NI*NJ))*DD(IJK)
  3238. ! END DO
  3239. ! END DO
  3240. ! END DO
  3241. !
  3242. ! DO K=2,NKM
  3243. ! DO I=2,NIM
  3244. ! DO J=2,NJM
  3245. ! IJK=LK(K)+LI(I)+J
  3246. ! ZK(IJK)=ZK(IJK)/(DD(IJK)+1.E-30)
  3247. ! END DO
  3248. ! END DO
  3249. ! END DO
  3250. !
  3251. !.....BACKWARD SUBSTITUTION; CALCULATE SCALAR PRODUCT SK
  3252. ! MPI
  3253. SK=0.
  3254. ! BLK
  3255. DO B=1,3
  3256. DO K=BZE(B),BZS(B),-1
  3257. DO I=NIM,2,-1
  3258. DO J=BYE(B),BYS(B),-1
  3259. IJK=LK(K)+LI(I)+J
  3260. ! ZK(IJK)=(ZK(IJK)-AE(IJK)*ZK(IJK+NJ)-&
  3261. ! &AN(IJK)*ZK(IJK+1)-&
  3262. ! &AT(IJK)*ZK(IJK+NI*NJ))*DD(IJK)
  3263. ZK(IJK)=RES(IJK)
  3264. SK=SK+RES(IJK)*ZK(IJK)
  3265. END DO
  3266. END DO
  3267. END DO
  3268. END DO
  3269. !
  3270. !.....CALCULATE BETA AND NEW SEARCH VECTOR PK
  3271. ! MPI
  3272. IF (L.EQ.1) THEN
  3273. PK=RES
  3274. ELSE
  3275. BET=SK/S0
  3276. ! BLK
  3277. DO B=1,3
  3278. DO K=BZS(B),BZE(B)
  3279. DO I=2,NIM
  3280. DO J=BYS(B),BYE(B)
  3281. IJK=LK(K)+LI(I)+J
  3282. PK(IJK)=ZK(IJK)+BET*PK(IJK)
  3283. END DO
  3284. END DO
  3285. END DO
  3286. END DO
  3287. END IF
  3288. !
  3289. !.....CALCULATE SCALAR PRODUCT (PK.A PK) AND ALPHA (OVERWRITE
  3290. ! ZK)
  3291. ! MPI
  3292. !
  3293. ! MPI for PK(IJK+NIJ)
  3294. !
  3295. ! MPI for PK(IJK-NIJ)
  3296. !
  3297. ! MPI
  3298. !
  3299. !.....WEST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  3300. ! MPI
  3301. ! PERI
  3302. !
  3303. !.....EAST BOUNDARY (PERI, SHEAR FORCE IN Y-DIR, DU/DX=0)
  3304. ! MPI
  3305. ! PERI
  3306. !
  3307. ! MPI
  3308. PKAPK=0.
  3309. ! BLK
  3310. DO B=1,3
  3311. DO K=BZS(B),BZE(B)
  3312. DO I=2,NIM
  3313. DO J=BYS(B),BYE(B)
  3314. IJK=LK(K)+LI(I)+J
  3315. ZK(IJK)=AP(IJK)*PK(IJK) +AE(IJK)*PK(IJK+NJ)+&
  3316. &AW(IJK)*PK(IJK-NJ)+AN(IJK)*PK(IJK+1)+&
  3317. &AS(IJK)*PK(IJK-1) +AT(IJK)*PK(IJK+NIJ)+&
  3318. &AB(IJK)*PK(IJK-NIJ)
  3319. PKAPK=PKAPK+PK(IJK)*ZK(IJK)
  3320. END DO
  3321. END DO
  3322. END DO
  3323. END DO
  3324. ! MPI
  3325. !
  3326. ! MPI
  3327. ALF=SK/PKAPK
  3328. !
  3329. !.....CALCULATE VARIABLE CORRECTION, NEW RESIDUAL VECTOR, AND
  3330. ! NORM
  3331. ! MPI
  3332. RESL=0.
  3333. ! BLK
  3334. DO B=1,3
  3335. DO K=BZS(B),BZE(B)
  3336. DO I=2,NIM
  3337. DO J=BYS(B),BYE(B)
  3338. IJK=LK(K)+LI(I)+J
  3339. FI(IJK)=FI(IJK)+ALF*PK(IJK)
  3340. RES(IJK)=RES(IJK)-ALF*ZK(IJK)
  3341. RESL=RESL+ABS(RES(IJK))
  3342. END DO
  3343. END DO
  3344. END DO
  3345. END DO
  3346. ! MPI
  3347. S0=SK
  3348. !
  3349. !....CHECK CONVERGENCE
  3350. ! MPI
  3351. IF (L.EQ.1) THEN
  3352. RESOR(IFI)=RES0
  3353. END IF
  3354. !
  3355. ! MPI
  3356. RSM=RESL/(RESOR(IFI)+1.E-30)
  3357. IF (RSM.LT.SOR(IFI)) RETURN
  3358. !
  3359. !.....END OF ITERATION LOOP
  3360. !
  3361. END DO
  3362. !
  3363. END SUBROUTINE CGS
  3364. !
  3365. !#############################################################
  3366. SUBROUTINE PBOUND(FI,FIS1,FIB2)
  3367. !#############################################################
  3368. ! This routine calculates boundary values of pressure or
  3369. ! pressure-correction by extrapolating (linearly) from
  3370. ! inside.
  3371. !-------------------------------------------------------------
  3372. USE GLOBAL
  3373. IMPLICIT NONE
  3374. !
  3375. DOUBLE PRECISION, DIMENSION(1:NIJK), INTENT(INOUT) :: FI
  3376. DOUBLE PRECISION, DIMENSION(1:NIK), INTENT(INOUT) :: FIS1
  3377. DOUBLE PRECISION, DIMENSION(1:NIJ), INTENT(INOUT) :: FIB2
  3378. INTEGER :: NJ2,NIJ2
  3379. !-------------------------------------------------------------
  3380. !
  3381. !.....SOUTH BOUNDARIES
  3382. ! BLK1
  3383. DO K=2,BZE(1)
  3384. DO I=2,NIM
  3385. IK =(K-1)*NI+I
  3386. IJK=LK(K)+LI(I)+BYS(1)-1
  3387. FIS1(IK)=FI(IJK+1)+(FI(IJK+1)-FI(IJK+2))*FY(BYS(1))
  3388. END DO
  3389. END DO
  3390. ! BLK2
  3391. DO K=BZS(2),NKM
  3392. DO I=2,NIM
  3393. IJK=LK(K)+LI(I)+1
  3394. FI(IJK)=FI(IJK+1)+(FI(IJK+1)-FI(IJK+2))*FY(2)
  3395. END DO
  3396. END DO
  3397. !
  3398. !.....NORTH BOUNDARIES
  3399. ! BLK12
  3400. DO K=2,NKM
  3401. DO I=2,NIM
  3402. IJK=LK(K)+LI(I)+NJ
  3403. FI(IJK)=FI(IJK-1)+(FI(IJK-1)-FI(IJK-2))*(1.-FY(NJM-1))
  3404. END DO
  3405. END DO
  3406. !
  3407. !.....WEST AND EAST BOUNDARIES
  3408. ! BLK123
  3409. DO B=1,3
  3410. !
  3411. DO K=BZS(B),BZE(B)
  3412. NJ2=2*NJ
  3413. DO J=BYS(B),BYE(B)
  3414. IJK=LK(K)+LI(1)+J
  3415. FI(IJK)=FI(IJK+NJ)+(FI(IJK+NJ)-FI(IJK+NJ2))*FX(2)
  3416. IJK=LK(K)+LI(NI)+J
  3417. FI(IJK)=FI(IJK-NJ)+(FI(IJK-NJ)-FI(IJK-NJ2))*&
  3418. &(1.-FX(NIM-1))
  3419. END DO
  3420. END DO
  3421. !
  3422. END DO
  3423. !
  3424. !.....BOTTOM BOUNDARIES
  3425. ! BLK1
  3426. DO I=2,NIM
  3427. NIJ2=2*NIJ
  3428. DO J=BYS(1),NJM
  3429. IJK=LK(1)+LI(I)+J
  3430. FI(IJK)=FI(IJK+NIJ)+(FI(IJK+NIJ)-FI(IJK+NIJ2))*FZ(2)
  3431. END DO
  3432. END DO
  3433. ! BLK2
  3434. DO I=2,NIM
  3435. NIJ2=2*NIJ
  3436. DO J=2,BYE(2)
  3437. IJ =(I-1)*NJ+J
  3438. IJK=LK(BZS(2)-1)+LI(I)+J
  3439. FIB2(IJ)=FI(IJK+NIJ)+(FI(IJK+NIJ)-FI(IJK+NIJ2))*FZ(BZS(2))
  3440. END DO
  3441. END DO
  3442. !
  3443. !.....TOP BOUNDARY
  3444. ! BLK
  3445. DO I=2,NIM
  3446. NIJ2=2*NIJ
  3447. DO J=2,NJM
  3448. IJK=LK(NK)+LI(I)+J
  3449. FI(IJK)=FI(IJK-NIJ)+(FI(IJK-NIJ)-FI(IJK-NIJ2))*&
  3450. &(1.-FZ(NKM-1))
  3451. END DO
  3452. END DO
  3453. !
  3454. END SUBROUTINE PBOUND
  3455. !
  3456. !#############################################################
  3457. SUBROUTINE BCUVW
  3458. !#############################################################
  3459. ! In this routine, boundary conditions for U and V equations
  3460. ! are implemented, i.e. fluxes through boundary cell faces
  3461. ! are approximated. Here, the boundaries encountered in
  3462. ! cavity flows are considered; inlet and outlet boundaries
  3463. ! require different treatment, see Sect. 7.7.
  3464. !-------------------------------------------------------------
  3465. USE GLOBAL
  3466. IMPLICIT NONE
  3467. !----------------------------------------------------------
  3468. !
  3469. !.....SOUTH BOUNDARY (WALL; SHEAR FORCE IN X,Z-DIR, DV/DY=0)
  3470. ! 3D
  3471. ! BLK1
  3472. DO K=2,BZE(1)
  3473. DO I=2,NIM
  3474. IK =(K-1)*NI+I
  3475. IJK=LK(K)+LI(I)+BYS(1)
  3476. !
  3477. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3478. ! TURB
  3479. VISS=VISC
  3480. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3481. D=VISS*S/(YC(BYS(1))-Y(BYS(1)-1))
  3482. ! NANO
  3483. DNA1=VISS/((1.-PHIS)**2.5)
  3484. D=DNA1*S/(YC(BYS(1))-Y(BYS(1)-1))
  3485. !
  3486. APU(IJK)=APU(IJK)+D
  3487. SU(IJK) =SU(IJK)+D*US1(IK)!U(IJK-1)
  3488. !
  3489. APW(IJK)=APW(IJK)+D
  3490. SW(IJK) =SW(IJK)+D*WS1(IK)!W(IJK-1)
  3491. END DO
  3492. END DO
  3493. ! BLK2
  3494. DO K=BZS(2),NKM
  3495. DO I=2,NIM
  3496. IJK=LK(K)+LI(I)+2
  3497. !
  3498. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3499. ! TURB
  3500. VISS=VISC
  3501. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3502. D=VISS*S/(YC(2)-YC(1))
  3503. ! NANO
  3504. DNA1=VISS/((1.-PHIS)**2.5)
  3505. D=DNA1*S/(YC(2)-YC(1))
  3506. !
  3507. APU(IJK)=APU(IJK)+D
  3508. SU(IJK) =SU(IJK)+D*U(IJK-1)
  3509. !
  3510. APW(IJK)=APW(IJK)+D
  3511. SW(IJK) =SW(IJK)+D*W(IJK-1)
  3512. END DO
  3513. END DO
  3514. !
  3515. !.....NORTH BOUNDARY (WALL, SHEAR FORCE IN X,Z-DIR, DV/DY=0)
  3516. ! 3D
  3517. ! BLK13
  3518. DO K=2,NKM
  3519. DO I=2,NIM
  3520. IJK =LK(K)+LI(I)+NJM
  3521. !
  3522. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3523. ! TURB
  3524. VISS=VISC
  3525. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3526. D=VISS*S/(YC(NJ)-YC(NJM))
  3527. ! NANO
  3528. DNA1=VISS/((1.-PHIS)**2.5)
  3529. D=DNA1*S/(YC(NJ)-YC(NJM))
  3530. !
  3531. APU(IJK)=APU(IJK)+D
  3532. SU(IJK) =SU(IJK) +D*U(IJK+1)
  3533. !
  3534. APW(IJK)=APW(IJK)+D
  3535. SW(IJK) =SW(IJK) +D*W(IJK+1)
  3536. END DO
  3537. END DO
  3538. !
  3539. !.....WEST BOUNDARY (WALL, SHEAR FORCE IN Y,Z-DIR, DU/DX=0)
  3540. ! 3D
  3541. ! BLK123
  3542. DO B=1,3
  3543. !
  3544. DO K=BZS(B),BZE(B)
  3545. DO J=BYS(B),BYE(B)
  3546. IJK=LK(K)+LI(2)+J
  3547. !
  3548. S=(Y(J)-Y(J-1))*(Z(K)-Z(K-1))
  3549. ! TURB
  3550. VISS=VISC
  3551. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3552. D=VISS*S/(XC(2)-XC(1))
  3553. ! NANO
  3554. DNA1=VISS/((1.-PHIS)**2.5)
  3555. D=DNA1*S/(XC(2)-XC(1))
  3556. !
  3557. APV(IJK)=APV(IJK)+D
  3558. SV(IJK) =SV(IJK) +D*V(IJK-NJ)
  3559. !
  3560. APW(IJK)=APW(IJK)+D
  3561. SW(IJK) =SW(IJK) +D*W(IJK-NJ)
  3562. !
  3563. !.....EAST BOUNDARY (WALL, SHEAR FORCE IN Y,Z-DIR, DU/DX=0)
  3564. ! 3D
  3565. ! BLK123
  3566. IJK=LK(K)+LI(NIM)+J
  3567. !
  3568. S=(Y(J)-Y(J-1))*(Z(K)-Z(K-1))
  3569. ! TURB
  3570. VISS=VISC
  3571. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3572. D=VISS*S/(XC(NI)-XC(NIM))
  3573. ! NANO
  3574. DNA1=VISS/((1.-PHIS)**2.5)
  3575. D=DNA1*S/(XC(NI)-XC(NIM))
  3576. !
  3577. APV(IJK)=APV(IJK)+D
  3578. SV(IJK) =SV(IJK) +D*V(IJK+NJ)
  3579. !
  3580. APW(IJK)=APW(IJK)+D
  3581. SW(IJK) =SW(IJK) +D*W(IJK+NJ)
  3582. END DO
  3583. END DO
  3584. !
  3585. END DO
  3586. !
  3587. !.....BOTTOM BOUNDARY (INLET, SHEAR FORCE IN X,Y-DIR, NORMAL
  3588. ! FORCE IN Z-DIR)
  3589. ! 3D
  3590. ! INLET
  3591. ! BLK1
  3592. DO I=2,NIM
  3593. DO J=BYS(1),NJM
  3594. !
  3595. IJ =LI(I)+J
  3596. IJK=LK(2)+LI(I)+J
  3597. !
  3598. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  3599. ! TURB
  3600. VISS=VISC
  3601. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3602. D=VISS*S/(ZC(2)-ZC(1))
  3603. ! NANO
  3604. DNA1=VISS/((1.-PHIS)**2.5)
  3605. D=DNA1*S/(ZC(2)-ZC(1))
  3606. !
  3607. IF (FMI(IJ).GT.0.) THEN
  3608. CP=FMI(IJ)
  3609. ELSE
  3610. CP=0.
  3611. END IF
  3612. !
  3613. CB=-D-CP
  3614. !
  3615. APU(IJK)=APU(IJK)-CB
  3616. SU(IJK) =SU(IJK) -CB*U(IJK-NIJ)
  3617. !
  3618. APV(IJK)=APV(IJK)-CB
  3619. SV(IJK) =SV(IJK) -CB*V(IJK-NIJ)
  3620. !
  3621. APW(IJK)=APW(IJK)-CB
  3622. SW(IJK) =SW(IJK) -CB*W(IJK-NIJ)
  3623. !
  3624. END DO
  3625. END DO
  3626. !
  3627. !.....BOTTOM BOUNDARY (WALL, SHEAR FORCE IN X,Y-DIR, DW/DZ=0)
  3628. ! BLK2
  3629. DO I=2,NIM
  3630. DO J=2,BYE(2)
  3631. !
  3632. IJ =(I-1)*NJ+J
  3633. IJK=LK(BZS(2))+LI(I)+J
  3634. !
  3635. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  3636. ! TURB
  3637. VISS=VISC
  3638. IF(LCAL(ITE).AND.YPL(IJK).GT.CTRANS) VISS=VISW(IJK)
  3639. D=VISS*S/(ZC(BZS(2))-Z(BZS(2)-1))
  3640. ! NANO
  3641. DNA1=VISS/((1.-PHIS)**2.5)
  3642. D=DNA1*S/(ZC(BZS(2))-Z(BZS(2)-1))
  3643. !
  3644. APU(IJK)=APU(IJK)+D
  3645. SU(IJK) =SU(IJK) +D*UB2(IJ)
  3646. !
  3647. APV(IJK)=APV(IJK)+D
  3648. SV(IJK) =SV(IJK) +D*VB2(IJ)
  3649. !
  3650. END DO
  3651. END DO
  3652. !
  3653. !.....OUTLET (TOP) BOUNDARIES (CONSTANT GRADIENT BETWEEN
  3654. ! BOUNDARY & CV-CENTER ASSUMED). SHEAR FORCE IN X,Y-DIR,
  3655. ! NORMAL FORCE IN Z-DIR).
  3656. ! 3D
  3657. ! OUTLET
  3658. ! BLK23
  3659. DO I=2,NIM
  3660. DO J=2,NJM
  3661. IJ =LI(I)+J
  3662. IJK=LK(NKM)+LI(I)+J
  3663. !
  3664. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  3665. D=VIS(IJK+NIJ)*S/(ZC(NK)-ZC(NKM))
  3666. !
  3667. IF (FMO(IJ).LE.0.) THEN
  3668. CT=FMO(IJ)
  3669. ELSE
  3670. CT=0.
  3671. END IF
  3672. !
  3673. CB=-D+CT
  3674. !
  3675. APU(IJK)=APU(IJK)-CB
  3676. SU(IJK) =SU(IJK) -CB*U(IJK+NIJ)
  3677. !
  3678. APV(IJK)=APV(IJK)-CB
  3679. SV(IJK) =SV(IJK) -CB*V(IJK+NIJ)
  3680. !
  3681. APW(IJK)=APW(IJK)-CB
  3682. SW(IJK)=SW(IJK) -CB*W(IJK+NIJ)
  3683. END DO
  3684. END DO
  3685. !
  3686. END SUBROUTINE BCUVW
  3687. ! T
  3688. !#############################################################
  3689. SUBROUTINE BCT
  3690. !#############################################################
  3691. ! In this routine, boundary conditions for the temperature
  3692. ! equation are implemented, i.e. heat fluxes through the
  3693. ! boundary cell faces are calculated. Here, specified wall
  3694. ! temperature and adiabatic wall (zero heat flux) are
  3695. ! considered; treatment at symmetry planes is the same as
  3696. ! for an adiabatic wall, but inlet and outlet require
  3697. ! different treatment, see Sect. 7.7.
  3698. !-------------------------------------------------------------
  3699. USE GLOBAL
  3700. IMPLICIT NONE
  3701. !-------------------------------------------------------------
  3702. !
  3703. !.....SOUTH BOUNDARY (ISOTHERMAL WALL)
  3704. ! BLK1
  3705. DO K=2,BZE(1)
  3706. DO I=2,NIM
  3707. IK =(K-1)*NI+I
  3708. IJK=LK(K)+LI(I)+BYS(1)
  3709. !
  3710. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3711. !
  3712. !.....INTERPOLATED CELL FACE VALUES
  3713. ! TURB
  3714. VISI=VISW(IJK)-VISC
  3715. !
  3716. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  3717. ! TURB
  3718. DCOEF=(VISC+VISI/SIGT)/PRANL
  3719. D=DCOEF*S/(YC(BYS(1))-Y(BYS(1)-1))
  3720. ! NANO
  3721. DNA1=DCOEF/((1.-PHIS)**2.5)
  3722. D=DNA1*DNA3*S/(YC(BYS(1))-Y(BYS(1)-1))
  3723. !
  3724. AP(IJK)=AP(IJK)+D
  3725. SU(IJK)=SU(IJK)+D*TS1(IK)!T(IJK-1)
  3726. END DO
  3727. END DO
  3728. ! BLK2
  3729. DO K=BZS(2),NKM
  3730. DO I=2,NIM
  3731. IJK=LK(K)+LI(I)+2
  3732. !
  3733. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3734. !
  3735. !.....INTERPOLATED CELL FACE VALUES
  3736. ! TURB
  3737. VISI=VISW(IJK)-VISC
  3738. !
  3739. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  3740. ! TURB
  3741. DCOEF=(VISC+VISI/SIGT)/PRANL
  3742. D=DCOEF*S/(YC(2)-YC(1))
  3743. ! NANO
  3744. DNA1=DCOEF/((1.-PHIS)**2.5)
  3745. D=DNA1*DNA3*S/(YC(2)-YC(1))
  3746. !
  3747. AP(IJK)=AP(IJK)+D
  3748. SU(IJK)=SU(IJK)+D*T(IJK-1)
  3749. END DO
  3750. END DO
  3751. !
  3752. !.....NORTH BOUNDARY (ISOTHERMAL WALL)
  3753. !
  3754. ! BLK13
  3755. DO K=2,NKM
  3756. DO I=2,NIM
  3757. IJK=LK(K)+LI(I)+NJM
  3758. !
  3759. S=(X(I)-X(I-1))*(Z(K)-Z(K-1))
  3760. !
  3761. !.....INTERPOLATED CELL FACE VALUES
  3762. ! TURB
  3763. VISI=VISW(IJK)-VISC
  3764. !
  3765. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  3766. ! TURB
  3767. DCOEF=(VISC+VISI/SIGT)/PRANL
  3768. D=DCOEF*S/(YC(NJ)-YC(NJM))
  3769. ! NANO
  3770. DNA1=DCOEF/((1.-PHIS)**2.5)
  3771. D=DNA1*DNA3*S/(YC(NJ)-YC(NJM))
  3772. !
  3773. AP(IJK)=AP(IJK)+D
  3774. SU(IJK)=SU(IJK)+D*T(IJK+1)
  3775. END DO
  3776. END DO
  3777. !
  3778. !.....WEST BOUNDARY (ADIABATIC WALL)
  3779. ! BLK123
  3780. DO B=1,3
  3781. !
  3782. DO K=BZS(B),BZE(B)
  3783. DO J=BYS(B),BYE(B)
  3784. IJK=LK(K)+LI(1)+J
  3785. T(IJK)=T(IJK+NJ)
  3786. !
  3787. !.....EAST BOUNDARY (ADIABATIC WALL)
  3788. ! BLK123
  3789. IJK=LK(K)+LI(NI)+J
  3790. T(IJK)=T(IJK-NJ)
  3791. END DO
  3792. END DO
  3793. !
  3794. END DO
  3795. !
  3796. !.....BOTTOM BOUNDARY (ISOTHERMAL INLET), SEE CALCSC SUBROUTINE
  3797. ! BLK1
  3798. !
  3799. !.....BOTTOM BOUNDARY (ISOTHERMAL WALL)
  3800. ! BLK2
  3801. DO I=2,NIM
  3802. DO J=2,BYE(2)
  3803. !
  3804. IJ =(I-1)*NJ+J
  3805. IJK=LK(BZS(2))+LI(I)+J
  3806. !
  3807. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  3808. !
  3809. !.....INTERPOLATED CELL FACE VALUES
  3810. ! TURB
  3811. VISI=VISW(IJK)-VISC
  3812. !
  3813. !.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
  3814. ! TURB
  3815. DCOEF=(VISC+VISI/SIGT)/PRANL
  3816. D=DCOEF*S/(ZC(BZS(2))-Z(BZS(2)-1))
  3817. ! NANO
  3818. DNA1=DCOEF/((1.-PHIS)**2.5)
  3819. D=DNA1*DNA3*S/(ZC(BZS(2))-Z(BZS(2)-1))
  3820. !
  3821. AP(IJK)=AP(IJK)+D
  3822. SU(IJK)=SU(IJK)+D*TB2(IJ)!T(IJK-NIJ)
  3823. END DO
  3824. END DO
  3825. !
  3826. !.....TOP BOUNDARY (ZERO GRAD OUTLET), SEE CALCSC SUBROUTINE
  3827. ! BLK23
  3828. !
  3829. END SUBROUTINE BCT
  3830. ! TURB
  3831. !###############################################################
  3832. SUBROUTINE KINE
  3833. !###############################################################
  3834. ! This routine assembles the source terms (volume integrals)
  3835. ! and applies wall boundary conditions for the turbulent
  3836. ! kinetic energy equation.
  3837. !===============================================================
  3838. USE GLOBAL
  3839. IMPLICIT NONE
  3840. !
  3841. DOUBLE PRECISION :: DUX,DUY,DUZ
  3842. DOUBLE PRECISION :: DVX,DVY,DVZ
  3843. DOUBLE PRECISION :: DWX,DWY,DWZ
  3844. !
  3845. DOUBLE PRECISION :: G11,G12,G13
  3846. DOUBLE PRECISION :: G21,G22,G23
  3847. DOUBLE PRECISION :: G31,G32,G33
  3848. !
  3849. DOUBLE PRECISION :: XTW,YTW,ZTW
  3850. !--------------------------------------------------------------
  3851. !
  3852. !.....VOLUMETRIC SOURCES OF THE MODELLED TURBULENT KINETIC ENERGY
  3853. ! BLK
  3854. DO B=1,3
  3855. DO K=BZS(B),BZE(B)
  3856. DZ=Z(K)-Z(K-1)
  3857. DO I=2,NIM
  3858. DX=X(I)-X(I-1)
  3859. DO J=BYS(B),BYE(B)
  3860. DY=Y(J)-Y(J-1)
  3861. IJK=LK(K)+LI(I)+J
  3862. !
  3863. !.....CELL-FACE U,V,W, CELL-CENTER GRADIENT
  3864. !
  3865. UE=U(IJK+NJ)*FX(I)+U(IJK)*(1.-FX(I))
  3866. UW=U(IJK)*FX(I-1)+U(IJK-NJ)*(1.-FX(I-1))
  3867. UN=U(IJK+1)*FY(J)+U(IJK)*(1.-FY(J))
  3868. US=U(IJK)*FY(J-1)+U(IJK-1)*(1.-FY(J-1))
  3869. UT=U(IJK+NIJ)*FZ(K)+U(IJK)*(1.-FZ(K))
  3870. UB=U(IJK)*FZ(K-1)+U(IJK-NIJ)*(1.-FZ(K-1))
  3871.  
  3872. VE=V(IJK+NJ)*FX(I)+V(IJK)*(1.-FX(I))
  3873. VW=V(IJK)*FX(I-1)+V(IJK-NJ)*(1.-FX(I-1))
  3874. VN=V(IJK+1)*FY(J)+V(IJK)*(1.-FY(J))
  3875. VS=V(IJK)*FY(J-1)+V(IJK-1)*(1.-FY(J-1))
  3876. VT=V(IJK+NIJ)*FZ(K)+V(IJK)*(1.-FZ(K))
  3877. VB=V(IJK)*FZ(K-1)+V(IJK-NIJ)*(1.-FZ(K-1))
  3878. !
  3879. WE=W(IJK+NJ)*FX(I)+W(IJK)*(1.-FX(I))
  3880. WW=W(IJK)*FX(I-1)+W(IJK-NJ)*(1.-FX(I-1))
  3881. WN=W(IJK+1)*FY(J)+W(IJK)*(1.-FY(J))
  3882. WS=W(IJK)*FY(J-1)+W(IJK-1)*(1.-FY(J-1))
  3883. WT=W(IJK+NIJ)*FZ(K)+W(IJK)*(1.-FZ(K))
  3884. WB=W(IJK)*FZ(K-1)+W(IJK-NIJ)*(1.-FZ(K-1))
  3885. !
  3886. DUX=(UE-UW)/DX
  3887. DUY=(UN-US)/DY
  3888. DUZ=(UT-UB)/DZ
  3889. !
  3890. DVX=(VE-VW)/DX
  3891. DVY=(VN-VS)/DY
  3892. DVZ=(VT-VB)/DZ
  3893. !
  3894. DWX=(WE-WW)/DX
  3895. DWY=(WN-WS)/DY
  3896. DWZ=(WT-WB)/DZ
  3897. !
  3898. ! EQ. (9.28) FERZIGER AND PERIC 2ND ED.
  3899. !
  3900. G11=2.*DUX**2
  3901. G12=(DUY+DVX)*DUY
  3902. G13=(DUZ+DWX)*DUZ
  3903. G21=(DVX+DUY)*DVX
  3904. G22=2.*DVY**2
  3905. G23=(DVZ+DWY)*DVZ
  3906. G31=(DWX+DUZ)*DWX
  3907. G32=(DWY+DVZ)*DWY
  3908. G33=2.*DWZ**2
  3909. GEN(IJK)=(VIS(IJK)-VISC)*(G11+G12+G13+G21+G22+G23+G31+G32+G33)
  3910. !
  3911. ! EQ. (9.28) FERZIGER AND PERIC 2ND ED.
  3912. !
  3913. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  3914. !
  3915. ! SECOND LAST PARAGRAPH, PP. 280, FERZIGER AND PERIC 2ND ED.
  3916. !
  3917. AP(IJK)=AP(IJK)+DENSIT*VOL(IJK)*ED(IJK)/(TE(IJK)+SMALL)
  3918. !
  3919. END DO
  3920. END DO
  3921. END DO
  3922. END DO
  3923. !
  3924. !.....SOUTH BOUNDARY (WALL)
  3925. ! BLK1
  3926. DO K=2,BZE(1)
  3927. DO I=2,NIM
  3928. IK =(K-1)*NI+I
  3929. IJK=LK(K)+LI(I)+BYS(1)
  3930. !
  3931. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  3932. VISS=VISC
  3933. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  3934. !
  3935. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  3936. !
  3937. XTW=U(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  3938. ZTW=W(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  3939. !
  3940. ! EQNS. (8.74) AND (8.76) FERZIGER AND PERIC 2ND ED.
  3941. !
  3942. ! NANO
  3943. !
  3944. DNA1=VISS/((1.-PHIS)**2.5)
  3945. TAU=DNA1*((U(IJK)-US1(IK))*XTW+(W(IJK)-WS1(IK))*ZTW)/&
  3946. &(YC(BYS(1))-Y(BYS(1)-1))
  3947. !
  3948. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  3949. !
  3950. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  3951. &((YC(BYS(1))-Y(BYS(1)-1))*CAPPA)
  3952. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  3953. END DO
  3954. END DO
  3955. !
  3956. !.....SOUTH BOUNDARY (WALL)
  3957. ! BLK2
  3958. DO K=BZS(2),NKM
  3959. DO I=2,NIM
  3960. IJK=LK(K)+LI(I)+2
  3961. !
  3962. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  3963. VISS=VISC
  3964. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  3965. !
  3966. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  3967. !
  3968. XTW=U(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  3969. ZTW=W(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  3970. !
  3971. ! EQNS. (8.74) AND (8.76) FERZIGER AND PERIC 2ND ED.
  3972. !
  3973. ! NANO
  3974. !
  3975. DNA1=VISS/((1.-PHIS)**2.5)
  3976. TAU=DNA1*((U(IJK)-U(IJK-1))*XTW&
  3977. &+(W(IJK)-W(IJK-1))*ZTW)/(YC(2)-YC(1))
  3978. !
  3979. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  3980. !
  3981. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  3982. &((YC(2)-YC(1))*CAPPA)
  3983. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  3984. END DO
  3985. END DO
  3986. !
  3987. !.....NORTH BOUNDARY (WALL)
  3988. ! BLK13
  3989. DO K=2,NKM
  3990. DO I=2,NIM
  3991. IJK=LK(K)+LI(I)+NJM
  3992. !
  3993. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  3994. VISS=VISC
  3995. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  3996. !
  3997. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  3998. !
  3999. XTW=U(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  4000. ZTW=W(IJK)/(SQRT(U(IJK)**2+W(IJK)**2)+SMALL)
  4001. !
  4002. ! EQNS. (8.74) AND (8.76) FERZIGER AND PERIC 2ND ED.
  4003. !
  4004. ! NANO
  4005. !
  4006. DNA1=VISS/((1.-PHIS)**2.5)
  4007. TAU=DNA1*((U(IJK+1)-U(IJK))*XTW&
  4008. &+(W(IJK+1)-W(IJK))*ZTW)/(YC(NJ)-YC(NJM))
  4009. !
  4010. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  4011. !
  4012. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  4013. &((YC(NJ)-YC(NJM))*CAPPA)
  4014. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  4015. END DO
  4016. END DO
  4017. !
  4018. !.....WEST BOUNDARY (WALL)
  4019. ! BLK123
  4020. DO B=1,3
  4021. DO K=BZS(B),BZE(B)
  4022. DO J=BYS(B),BYE(B)
  4023. IJK=LK(K)+LI(2)+J
  4024. !
  4025. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  4026. VISS=VISC
  4027. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  4028. !
  4029. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  4030. !
  4031. YTW=V(IJK)/(SQRT(V(IJK)**2+W(IJK)**2)+SMALL)
  4032. ZTW=W(IJK)/(SQRT(V(IJK)**2+W(IJK)**2)+SMALL)
  4033. !
  4034. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  4035. !
  4036. ! NANO
  4037. !
  4038. DNA1=VISS/((1.-PHIS)**2.5)
  4039. TAU=DNA1*((V(IJK)-V(IJK-NJ))*YTW&
  4040. &+(W(IJK)-W(IJK-NJ))*ZTW)/(XC(2)-XC(1))
  4041. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  4042. &((XC(2)-XC(1))*CAPPA)
  4043. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  4044. END DO
  4045. END DO
  4046. END DO
  4047. !
  4048. !.....EAST BOUNDARY (WALL)
  4049. ! BLK123
  4050. DO B=1,3
  4051. DO K=BZS(B),BZE(B)
  4052. DO J=BYS(B),BYE(B)
  4053. IJK=LK(K)+LI(NIM)+J
  4054. !
  4055. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  4056. VISS=VISC
  4057. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  4058. !
  4059. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  4060. !
  4061. YTW=V(IJK)/(SQRT(V(IJK)**2+W(IJK)**2)+SMALL)
  4062. ZTW=W(IJK)/(SQRT(V(IJK)**2+W(IJK)**2)+SMALL)
  4063. !
  4064. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  4065. !
  4066. ! NANO
  4067. !
  4068. DNA1=VISS/((1.-PHIS)**2.5)
  4069. TAU=DNA1*((V(IJK+NJ)-V(IJK))*YTW&
  4070. &+(W(IJK+NJ)-W(IJK))*ZTW)/(XC(NI)-XC(NIM))
  4071. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  4072. &((XC(NI)-XC(NIM))*CAPPA)
  4073. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  4074. END DO
  4075. END DO
  4076. END DO
  4077. !
  4078. !.....BOTTOM BOUNDARY (INLET), SEE MAIN PROGRAM AND CALCSC
  4079. ! SUBROUTINE
  4080. ! BLK1
  4081. !
  4082. !.....BOTTOM BOUNDARY (WALL)
  4083. ! BLK2
  4084. DO I=2,NIM
  4085. DO J=2,BYE(2)
  4086. !
  4087. IJ =(I-1)*NJ+J
  4088. IJK=LK(BZS(2))+LI(I)+J
  4089. !
  4090. SU(IJK)=SU(IJK)-GEN(IJK)*VOL(IJK)
  4091. VISS=VISC
  4092. IF(LCAL(ITE).AND.(YPL(IJK)).GT.CTRANS) VISS=VISW(IJK)
  4093. !
  4094. ! UNIT TANGENT VECTOR ON A WALL BASED ON VELOCITY COMPONENTS
  4095. !
  4096. XTW=U(IJK)/(SQRT(U(IJK)**2+V(IJK)**2)+SMALL)
  4097. YTW=V(IJK)/(SQRT(U(IJK)**2+V(IJK)**2)+SMALL)
  4098. !
  4099. ! EQNS. (8.74) AND (8.76) FERZIGER AND PERIC 2ND ED.
  4100. !
  4101. ! NANO
  4102. !
  4103. DNA1=VISS/((1.-PHIS)**2.5)
  4104. TAU=DNA1*((U(IJK)-UB2(IJ))*XTW&
  4105. &+(V(IJK)-VB2(IJ))*YTW)/(ZC(BZS(2))-Z(BZS(2)-1))
  4106. !
  4107. ! EQNS. (9.39) AND (9.38) FERZIGER AND PERIC 2ND ED.
  4108. !
  4109. GEN(IJK)=ABS(TAU)*CMU25*SQRT(MAX(ZERO,TE(IJK)))/&
  4110. &((ZC(BZS(2))-Z(BZS(2)-1))*CAPPA)
  4111. SU(IJK)=SU(IJK)+GEN(IJK)*VOL(IJK)
  4112. END DO
  4113. END DO
  4114. !
  4115. !.....TOP BOUNDARY (OUTLET), SEE CALCSC SUBROUTINE
  4116. ! BLK23
  4117. RETURN
  4118. END SUBROUTINE KINE
  4119. ! TURB
  4120. !###############################################################
  4121. SUBROUTINE DISE
  4122. !###############################################################
  4123. ! This routine assembles the source terms (volume integrals)
  4124. ! and applies wall boundary conditions for the dissipation
  4125. ! rate equation.
  4126. !===============================================================
  4127. USE GLOBAL
  4128. IMPLICIT NONE
  4129. !
  4130. DOUBLE PRECISION :: TMP
  4131. !--------------------------------------------------------------
  4132. !
  4133. !.....VOLUMETRIC SOURCES FOR THE MODELLED DISSIPATION RATE
  4134. ! BLK
  4135. DO B=1,3
  4136. DO K=BZS(B),BZE(B)
  4137. DZ=Z(K)-Z(K-1)
  4138. DO I=2,NIM
  4139. DX=X(I)-X(I-1)
  4140. DO J=BYS(B),BYE(B)
  4141. DY=Y(J)-Y(J-1)
  4142. IJK=LK(K)+LI(I)+J
  4143. !
  4144. ! EQ. (9.30) FERZIGER AND PERIC 2ND ED.
  4145. !
  4146. TMP=ED(IJK)*VOL(IJK)/(TE(IJK)+SMALL)
  4147. SU(IJK)=SU(IJK)+CE1*TMP*GEN(IJK)
  4148. AP(IJK)=AP(IJK)+CE2*TMP*DENSIT
  4149. END DO
  4150. END DO
  4151. END DO
  4152. END DO
  4153. !
  4154. !.....WALL BOUNDARIES APPROXIMATED WITH WALL FUNCTIONS.
  4155. ! FOR CORRECT VALUES OF DISSIPATION ALL COEFFICIENTS HAVE
  4156. ! TO BE ZERO, SU EQUAL THE DISSIPATION, AND AP = 1.
  4157. !
  4158. !.....SOUTH BOUNDARY (WALL)
  4159. ! BLK1
  4160. DO K=2,BZE(1)
  4161. DO I=2,NIM
  4162. IK =(K-1)*NI+I
  4163. IJK=LK(K)+LI(I)+BYS(1)
  4164. !
  4165. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4166. !
  4167. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/&
  4168. &(CAPPA*(YC(BYS(1))-Y(BYS(1)-1)))
  4169. SU(IJK)=ED(IJK)
  4170. AP(IJK)=1.
  4171. AS(IJK)=0.
  4172. AN(IJK)=0.
  4173. AB(IJK)=0.
  4174. AT(IJK)=0.
  4175. AW(IJK)=0.
  4176. AE(IJK)=0.
  4177. END DO
  4178. END DO
  4179. !
  4180. !.....SOUTH BOUNDARY (WALL)
  4181. ! BLK2
  4182. DO K=BZS(2),NKM
  4183. DO I=2,NIM
  4184. IJK=LK(K)+LI(I)+2
  4185. !
  4186. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4187. !
  4188. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/(CAPPA*(YC(2)-YC(1)))
  4189. SU(IJK)=ED(IJK)
  4190. AP(IJK)=1.
  4191. AS(IJK)=0.
  4192. AN(IJK)=0.
  4193. AB(IJK)=0.
  4194. AT(IJK)=0.
  4195. AW(IJK)=0.
  4196. AE(IJK)=0.
  4197. END DO
  4198. END DO
  4199. !
  4200. !.....NORTH BOUNDARY (WALL)
  4201. ! BLK13
  4202. DO K=2,NKM
  4203. DO I=2,NIM
  4204. IJK=LK(K)+LI(I)+NJM
  4205. !
  4206. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4207. !
  4208. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/(CAPPA*(YC(NJ)-YC(NJM)))
  4209. SU(IJK)=ED(IJK)
  4210. AP(IJK)=1.
  4211. AS(IJK)=0.
  4212. AN(IJK)=0.
  4213. AB(IJK)=0.
  4214. AT(IJK)=0.
  4215. AW(IJK)=0.
  4216. AE(IJK)=0.
  4217. END DO
  4218. END DO
  4219. !
  4220. !.....WEST BOUNDARY (WALL)
  4221. ! BLK123
  4222. DO B=1,3
  4223. DO K=BZS(B),BZE(B)
  4224. DO J=BYS(B),BYE(B)
  4225. IJK=LK(K)+LI(2)+J
  4226. !
  4227. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4228. !
  4229. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/(CAPPA*(XC(2)-XC(1)))
  4230. SU(IJK)=ED(IJK)
  4231. AP(IJK)=1.
  4232. AS(IJK)=0.
  4233. AN(IJK)=0.
  4234. AB(IJK)=0.
  4235. AT(IJK)=0.
  4236. AW(IJK)=0.
  4237. AE(IJK)=0.
  4238. END DO
  4239. END DO
  4240. END DO
  4241. !
  4242. !.....EAST BOUNDARY (WALL)
  4243. ! BLK123
  4244. DO B=1,3
  4245. DO K=BZS(B),BZE(B)
  4246. DO J=BYS(B),BYE(B)
  4247. IJK=LK(K)+LI(NIM)+J
  4248. !
  4249. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4250. !
  4251. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/(CAPPA*(XC(NI)-XC(NIM)))
  4252. SU(IJK)=ED(IJK)
  4253. AP(IJK)=1.
  4254. AS(IJK)=0.
  4255. AN(IJK)=0.
  4256. AB(IJK)=0.
  4257. AT(IJK)=0.
  4258. AW(IJK)=0.
  4259. AE(IJK)=0.
  4260. END DO
  4261. END DO
  4262. END DO
  4263. !
  4264. !.....BOTTOM BOUNDARY (INLET), SEE MAIN PROGRAM AND CALCSC
  4265. ! SUBROUTINE
  4266. ! BLK1
  4267. !
  4268. !.....BOTTOM BOUNDARY (WALL)
  4269. ! BLK2
  4270. DO I=2,NIM
  4271. DO J=2,BYE(2)
  4272. IJK=LK(BZS(2))+LI(I)+J
  4273. !
  4274. ! EQ. (9.40) FERZIGER AND PERIC 2ND ED.
  4275. !
  4276. ED(IJK)=CMU75*(MAX(ZERO,TE(IJK)))**1.5/&
  4277. &(CAPPA*(ZC(BZS(2))-Z(BZS(2)-1)))
  4278. SU(IJK)=ED(IJK)
  4279. AP(IJK)=1.
  4280. AS(IJK)=0.
  4281. AN(IJK)=0.
  4282. AB(IJK)=0.
  4283. AT(IJK)=0.
  4284. AW(IJK)=0.
  4285. AE(IJK)=0.
  4286. END DO
  4287. END DO
  4288. !
  4289. !.....TOP BOUNDARY (OUTLET), SEE CALCSC SUBROUTINE
  4290. ! BLK23
  4291. !
  4292. RETURN
  4293. END SUBROUTINE DISE
  4294. ! TURB
  4295. !#############################################################
  4296. SUBROUTINE MODVIS
  4297. !#############################################################
  4298. ! This routine calculates the eddy viscosity and the
  4299. ! dimensionless distance from the wall; also, an effective
  4300. ! wall viscosity is calculated so that the shear stress
  4301. ! can be computed using the same approximation as for
  4302. ! laminar flows (see Eqs. (9.37), (8.74) and (8.73)).
  4303. !=============================================================
  4304. USE GLOBAL
  4305. IMPLICIT NONE
  4306. !
  4307. DOUBLE PRECISION :: CK,VISCW,VISOLD
  4308. !--------------------------------------------------------------
  4309. !
  4310. !.....EDDY VISCOSITY,DIMENSIONLESS WALL DISTANCE AND LOCAL REYNOLDS-
  4311. ! NUMBER
  4312. ! BLK
  4313. DO B=1,3
  4314. DO K=BZS(B),BZE(B)
  4315. DZ=Z(K)-Z(K-1)
  4316. DO I=2,NIM
  4317. DX=X(I)-X(I-1)
  4318. DO J=BYS(B),BYE(B)
  4319. DY=Y(J)-Y(J-1)
  4320. IJK=LK(K)+LI(I)+J
  4321. !
  4322. VISOLD=VIS(IJK)
  4323. !
  4324. ! EQ. (9.31) FERZIGER AND PERIC 2ND ED.
  4325. !
  4326. VIS(IJK)=(VISC+CMU*DENSIT*TE(IJK)**2/&
  4327. &(ED(IJK)+SMALL))*URF(IVIS)&
  4328. &+VISOLD*(1.-URF(IVIS))
  4329. !
  4330. ! VIS(IJK)=VISC+0.001*(VIS(IJK)-VISC)
  4331. END DO
  4332. END DO
  4333. END DO
  4334. END DO
  4335. !
  4336. !.....SOUTH BOUNDARY (WALL)
  4337. ! BLK1
  4338. DO K=2,BZE(1)
  4339. DO I=2,NIM
  4340. IK =(K-1)*NI+I
  4341. IJK=LK(K)+LI(I)+BYS(1)
  4342. !
  4343. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4344. !
  4345. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4346. !
  4347. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4348. !
  4349. YPL(IJK)=DENSIT*CK*(YC(BYS(1))-Y(BYS(1)-1))/VISC
  4350. !
  4351. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4352. ! FERZIGER AND PERIC 2ND ED.
  4353. !
  4354. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4355. VISW(IJK)=MAX(VISC,VISCW)
  4356. VIS(IJK-1)=VISW(IJK)
  4357. !
  4358. END DO
  4359. END DO
  4360. !
  4361. !.....SOUTH BOUNDARY (WALL)
  4362. ! BLK2
  4363. DO K=BZS(2),NKM
  4364. DO I=2,NIM
  4365. IJK=LK(K)+LI(I)+2
  4366. !
  4367. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4368. !
  4369. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4370. !
  4371. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4372. !
  4373. YPL(IJK)=DENSIT*CK*(YC(2)-YC(1))/VISC
  4374. !
  4375. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4376. ! FERZIGER AND PERIC 2ND ED.
  4377. !
  4378. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4379. VISW(IJK)=MAX(VISC,VISCW)
  4380. VIS(IJK-1)=VISW(IJK)
  4381. !
  4382. END DO
  4383. END DO
  4384. !
  4385. !.....NORTH BOUNDARY (WALL)
  4386. ! BLK13
  4387. DO K=2,NKM
  4388. DO I=2,NIM
  4389. IJK=LK(K)+LI(I)+NJM
  4390. !
  4391. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4392. !
  4393. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4394. !
  4395. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4396. !
  4397. YPL(IJK)=DENSIT*CK*(YC(NJ)-YC(NJM))/VISC
  4398. !
  4399. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4400. ! FERZIGER AND PERIC 2ND ED.
  4401. !
  4402. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4403. VISW(IJK)=MAX(VISC,VISCW)
  4404. VIS(IJK+1)=VISW(IJK)
  4405. !
  4406. END DO
  4407. END DO
  4408. !
  4409. !.....WEST BOUNDARY (WALL)
  4410. ! BLK123
  4411. DO B=1,3
  4412. DO K=BZS(B),BZE(B)
  4413. DO J=BYS(B),BYE(B)
  4414. IJK=LK(K)+LI(2)+J
  4415. !
  4416. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4417. !
  4418. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4419. !
  4420. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4421. !
  4422. YPL(IJK)=DENSIT*CK*(XC(2)-XC(1))/VISC
  4423. !
  4424. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4425. ! FERZIGER AND PERIC 2ND ED.
  4426. !
  4427. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4428. VISW(IJK)=MAX(VISC,VISCW)
  4429. VIS(IJK-NJ)=VISW(IJK)
  4430. !
  4431. END DO
  4432. END DO
  4433. END DO
  4434. !
  4435. !.....EAST BOUNDARY (WALL)
  4436. ! BLK123
  4437. DO B=1,3
  4438. DO K=BZS(B),BZE(B)
  4439. DO J=BYS(B),BYE(B)
  4440. IJK=LK(K)+LI(NIM)+J
  4441. !
  4442. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4443. !
  4444. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4445. !
  4446. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4447. !
  4448. YPL(IJK)=DENSIT*CK*(XC(NI)-XC(NIM))/VISC
  4449. !
  4450. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4451. ! FERZIGER AND PERIC 2ND ED.
  4452. !
  4453. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4454. VISW(IJK)=MAX(VISC,VISCW)
  4455. VIS(IJK+NJ)=VISW(IJK)
  4456. !
  4457. END DO
  4458. END DO
  4459. END DO
  4460. !
  4461. !.....BOTTOM BOUNDARY (INLET), SEE CALCSC SUBROUTINE
  4462. ! BLK1
  4463. !
  4464. !.....BOTTOM BOUNDARY (WALL)
  4465. ! BLK2
  4466. DO I=2,NIM
  4467. DO J=2,BYE(2)
  4468. !
  4469. IJ =(I-1)*NJ+J
  4470. IJK=LK(BZS(2))+LI(I)+J
  4471. !
  4472. ! EQ. (9.36) FERZIGER AND PERIC 2ND ED.
  4473. !
  4474. CK=CMU25*SQRT(MAX(ZERO,TE(IJK)))
  4475. !
  4476. ! EQ. (9.35) FERZIGER AND PERIC 2ND ED.
  4477. !
  4478. YPL(IJK)=DENSIT*CK*(ZC(BZS(2))-Z(BZS(2)-1))/VISC
  4479. !
  4480. ! EQNS. (9.34),(9.35),(9.36),(9.37) AND FOOTNOTE PP283
  4481. ! FERZIGER AND PERIC 2ND ED.
  4482. !
  4483. VISCW=YPL(IJK)*VISC*CAPPA/LOG(ELOG*YPL(IJK))
  4484. VISW(IJK)=MAX(VISC,VISCW)
  4485. VIS(IJK-NIJ)=VISW(IJK)
  4486. END DO
  4487. END DO
  4488. !
  4489. !.....TOP BOUNDARY (ZERO GRAD OUTLET), SEE CALCSC SUBROUTINE
  4490. ! BLK23
  4491. ! 3D
  4492. ! OUTLET
  4493. ! BLK23
  4494. DO I=2,NIM
  4495. DO J=2,NJM
  4496. IJ =LI(I)+J
  4497. IJK=LK(NKM)+LI(I)+J
  4498. VIS(IJK+NIJ)=VIS(IJK)
  4499. END DO
  4500. END DO
  4501. !
  4502. VISMAX=0.
  4503. DO K=2,NKM
  4504. DO I=2,NIM
  4505. DO J=2,NJM
  4506. IJK=LK(K)+LI(I)+J
  4507. IF (VIS(IJK).GT.VISMAX) THEN
  4508. VISMAX=VIS(IJK)
  4509. IJKMAX=IJK
  4510. END IF
  4511. END DO
  4512. END DO
  4513. END DO
  4514. !
  4515. RETURN
  4516. END SUBROUTINE MODVIS
  4517. ! TURB
  4518. !########################################################
  4519. SUBROUTINE MODDAT
  4520. !########################################################
  4521. ! In this routine some constants are assigned values.
  4522. !========================================================
  4523. USE GLOBAL
  4524. IMPLICIT NONE
  4525. !--------------------------------------------------------------
  4526. ITE =6
  4527. IED =7
  4528. IVIS=8
  4529. !
  4530. !.....CONSTANTS OF STANDARD K-EPSILON MODEL
  4531. !
  4532. SIGT =0.9
  4533. SIGTE =1.0
  4534. SIGED =1.3
  4535. CE1 =1.44
  4536. CE2 =1.92
  4537. CMU =0.09
  4538. CMU25=SQRT(SQRT(CMU))
  4539. CMU75=CMU25**3
  4540. CTRANS=11.63
  4541. CAPPA =0.41
  4542. ELOG =8.342
  4543. !
  4544. RETURN
  4545. END SUBROUTINE MODDAT
  4546. ! ORIENT
  4547. !###########################################################
  4548. SUBROUTINE BCIN
  4549. !###########################################################
  4550. ! Setting boundary values for each time step
  4551. !-----------------------------------------------------------
  4552. USE GLOBAL
  4553. IMPLICIT NONE
  4554. !-----------------------------------------------------------
  4555. !
  4556. ! INLET
  4557. !
  4558. FLOMAS=0.
  4559. ! BLK1
  4560. ! NANO
  4561. DO I=2,NIM
  4562. DO J=BYS(1),NJM,1
  4563. IJ =(I-1)*NJ+J
  4564. IJK=LK(1)+LI(I)+J
  4565. W(IJK)=ULID
  4566. S=(X(I)-X(I-1))*(Y(J)-Y(J-1))
  4567. FMI(IJ)=DNA2*S*W(IJK)
  4568. FLOMAS=FLOMAS+FMI(IJ)
  4569. END DO
  4570. END DO
  4571. !
  4572. ! ORIENT
  4573. !
  4574. END SUBROUTINE BCIN
  4575. !
  4576. !#############################################################
  4577. SUBROUTINE P3D
  4578. !#############################################################
  4579. ! This routine plots results in PLOT3D format
  4580. !-------------------------------------------------------------
  4581. ! MPI
  4582. USE GLOBAL
  4583. IMPLICIT NONE
  4584. !
  4585. INTEGER :: M,N
  4586. CHARACTER*20 :: FILPLOT
  4587. !-------------------------------------------------------------
  4588. !
  4589. !.....POSTPROCESSING. PLOT3D GRID FILES.
  4590. !
  4591. IDIM=NI
  4592. JDIM=NJ
  4593. KDIM=NK
  4594. NVAR=4
  4595. !
  4596. ALLOCATE(RXC(1:IDIM,1:JDIM,1:KDIM))
  4597. ALLOCATE(RYC(1:IDIM,1:JDIM,1:KDIM))
  4598. ALLOCATE(RZC(1:IDIM,1:JDIM,1:KDIM))
  4599. !
  4600. DO I=1,IDIM,1
  4601. DO J=1,JDIM,1
  4602. DO K=1,KDIM,1
  4603. RXC(I,J,K)=REAL(XC(I))
  4604. RYC(I,J,K)=REAL(YC(J))
  4605. RZC(I,J,K)=REAL(ZC(K))
  4606. END DO
  4607. END DO
  4608. END DO
  4609. !
  4610. WRITE(FILPLOT,'(A5,E10.4,A4)') 'pcol_',TIME,'.xyz'
  4611. OPEN (UNIT=JUNIT,FORM='FORMATTED',FILE=FILPLOT)
  4612. REWIND JUNIT
  4613. WRITE(JUNIT,*) IDIM,JDIM,KDIM
  4614. WRITE(JUNIT,*) &
  4615. &(((RXC(I,J,K),I=1,IDIM),J=1,JDIM),K=1,KDIM),&
  4616. &(((RYC(I,J,K),I=1,IDIM),J=1,JDIM),K=1,KDIM),&
  4617. &(((RZC(I,J,K),I=1,IDIM),J=1,JDIM),K=1,KDIM)
  4618. WRITE(JUNIT,*)
  4619. CLOSE(JUNIT)
  4620. !
  4621. !.....POSTPROCESSING. PLOT3D FUNCTION FILES.
  4622. !
  4623. ALLOCATE(RU(1:NIJK),RV(1:NIJK),RW(1:NIJK),RP(1:NIJK))
  4624. !
  4625. RU=0.
  4626. RV=0.
  4627. RW=0.
  4628. RP=0.
  4629. DO IJK=1,NIJK
  4630. RU(IJK)=REAL(U(IJK))
  4631. RV(IJK)=REAL(V(IJK))
  4632. RW(IJK)=REAL(W(IJK))
  4633. RP(IJK)=REAL(P(IJK))
  4634. END DO
  4635. !
  4636. ALLOCATE(RFLDVAR(-1*IDIM*JDIM+1:IDIM*JDIM*(KDIM+&
  4637. &1),1:NVAR))
  4638. !
  4639. DO N=1,NVAR
  4640. DO IJK=1,NIJK
  4641. IF (N.EQ.1) RFLDVAR(IJK,N)=RU(IJK)
  4642. IF (N.EQ.2) RFLDVAR(IJK,N)=RV(IJK)
  4643. IF (N.EQ.3) RFLDVAR(IJK,N)=RW(IJK)
  4644. IF (N.EQ.4) RFLDVAR(IJK,N)=RP(IJK)
  4645. END DO
  4646. END DO
  4647. !
  4648. WRITE(FILPLOT,'(A5,E10.4,A2)') 'pcol_',TIME,'.q'
  4649. OPEN (UNIT=KUNIT,FORM='FORMATTED',FILE=FILPLOT)
  4650. REWIND KUNIT
  4651. WRITE(KUNIT,*) IDIM,JDIM,KDIM
  4652. WRITE(KUNIT,*) REAL(ULID/343.2), REAL(0.),&
  4653. &REAL(1000.0),REAL(TIME)
  4654. WRITE(KUNIT,*) (((DENSIT,I=1,IDIM),J=1,JDIM),K=1,KDIM)
  4655. WRITE(KUNIT,*) (((DENSIT*RFLDVAR(LK(K)+LI(I)+J,1),&
  4656. &I=1,IDIM),J=1,JDIM),K=1,KDIM)
  4657. WRITE(KUNIT,*) (((DENSIT*RFLDVAR(LK(K)+LI(I)+J,2),&
  4658. &I=1,IDIM),J=1,JDIM),K=1,KDIM)
  4659. WRITE(KUNIT,*) (((DENSIT*RFLDVAR(LK(K)+LI(I)+J,3),&
  4660. &I=1,IDIM),J=1,JDIM),K=1,KDIM)
  4661. WRITE(KUNIT,*) (((RFLDVAR(LK(K)+LI(I)+J,4),I=1,IDIM),&
  4662. &J=1,JDIM),K=1,KDIM)
  4663. WRITE(KUNIT,*)
  4664. CLOSE(KUNIT)
  4665. !
  4666. END SUBROUTINE P3D
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement