File: /nfs/home/0/users/jenkins/mfix.git/model/set_geometry1.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Module name: SET_GEOMETRY1                                          C
4     !  Purpose: Calculate cell volumes and face areas                      C
5     !                                                                      C
6     !  Author: M. Syamlal                                 Date: 1-MAY-96   C
7     !  Reviewer:                                                           C
8     !  Literature/Document References:                                     C
9     !                                                                      C
10     !  Variables referenced: COORDINATES, IMAX2, DT, DX, JMAX2, DY, KMAX2, C
11     !                        DZ,                                           C
12     !                                                                      C
13     !  Variables modified:                                                 C
14     !  Local variables:                                                    C
15     !                                                                      C
16     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
17     !
18           SUBROUTINE SET_GEOMETRY1
19     !...Translated by Pacific-Sierra Research VAST-90 2.06G5  12:17:31  12/09/98
20     !...Switches: -xf
21     !
22     !  Include param.inc file to specify parameter values
23     !
24     !-----------------------------------------------
25     !   M o d u l e s
26     !-----------------------------------------------
27           USE param
28           USE param1
29           USE parallel
30           USE run
31           USE geometry
32           USE indices
33           USE compar
34           USE functions
35     
36           IMPLICIT NONE
37     !-----------------------------------------------
38     !   G l o b a l   P a r a m e t e r s
39     !-----------------------------------------------
40     !-----------------------------------------------
41     !   L o c a l   P a r a m e t e r s
42     !-----------------------------------------------
43     !-----------------------------------------------
44     !   L o c a l   V a r i a b l e s
45     !-----------------------------------------------
46     !
47     !                      Indices
48           INTEGER          I, J, K, IP, JP, KP, IJK
49           INTEGER          i_cyl_min, i_cyl_max
50     !
51     !-----------------------------------------------
52     !
53     !                      Indices
54     !
55     !!!!$omp  parallel do private( I, J, K, IP, JP, KP, IJK)  &
56     !!!!$omp  schedule(dynamic,chunk_size)
57     !  For cylindrical_2D simulations
58           IF(CYLINDRICAL_2D)THEN
59              if(mod(imax,2).eq.1)then     ! odd
60                 i_cyl_min = (imax+1)/2 + 1 - i_cyl_num
61                 i_cyl_max = (imax+1)/2 + 1 + i_cyl_num
62              else
63                 i_cyl_min = (imax)/2 + 2 - i_cyl_num
64                 i_cyl_max = (imax)/2 + 1 + i_cyl_num
65              endif
66           ENDIF
67     
68           DO IJK = ijkstart3, ijkend3
69     
70     !
71              I = I_OF(IJK)
72              IP = IP1(I)
73              J = J_OF(IJK)
74              JP = JP1(J)
75              K = K_OF(IJK)
76              KP = KP1(K)
77     
78              IF(.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
79              IF (DEAD_CELL_AT(I,J,K)) CYCLE  ! skip dead cells
80     
81     !
82              VOL(IJK) = DX(I)*DY(J)*(X(I)*DZ(K))
83              VOL_U(IJK) = HALF*(DX(I)+DX(IP))*DY(J)*(HALF*(X(I)+X(IP))*DZ(K))
84              VOL_V(IJK) = DX(I)*HALF*(DY(J)+DY(JP))*(X(I)*DZ(K))
85              VOL_W(IJK) = DX(I)*DY(J)*(X(I)*HALF*(DZ(K)+DZ(KP)))
86     !
87              AYZ(IJK) = DY(J)*(X_E(I)*DZ(K))
88              AYZ_U(IJK) = DY(J)*(X(IP)*DZ(K))
89              AYZ_V(IJK) = HALF*(DY(J)+DY(JP))*(X_E(I)*DZ(K))
90              AYZ_W(IJK) = DY(J)*(X_E(I)*HALF*(DZ(K)+DZ(KP)))
91     !
92              AXY(IJK) = DX(I)*DY(J)
93              AXY_U(IJK) = HALF*(DX(I)+DX(IP))*DY(J)
94              AXY_V(IJK) = DX(I)*HALF*(DY(J)+DY(JP))
95              AXY_W(IJK) = AXY(IJK)
96     !
97              AXZ(IJK) = DX(I)*(X(I)*DZ(K))
98              AXZ_U(IJK) = HALF*(DX(I)+DX(IP))*(HALF*(X(I)+X(IP))*DZ(K))
99              AXZ_V(IJK) = AXZ(IJK)
100              AXZ_W(IJK) = DX(I)*(X(I)*HALF*(DZ(K)+DZ(KP)))
101     
102     
103           if(cylindrical_2d)then
104              VOL(IJK) = DX(I)*DY(J)*(cyl_X(I))
105              VOL_U(IJK) = HALF*(DX(I)+DX(IP))*DY(J)*(HALF*(cyl_X(I)+cyl_X(IP)))
106              VOL_V(IJK) = DX(I)*HALF*(DY(J)+DY(JP))*(cyl_X(I))
107              VOL_W(IJK) = DX(I)*DY(J)*(cyl_X(I))
108     !
109              AYZ(IJK) = DY(J)*(cyl_X_E(I))
110              AYZ_U(IJK) = DY(J)*(cyl_X(IP))
111              AYZ_V(IJK) = HALF*(DY(J)+DY(JP))*(cyl_X_E(I))
112              AYZ_W(IJK) = DY(J)*(cyl_X_E(I))
113     !
114              AXY(IJK) = DX(I)*DY(J)
115              AXY_U(IJK) = HALF*(DX(I)+DX(IP))*DY(J)
116              AXY_V(IJK) = DX(I)*HALF*(DY(J)+DY(JP))
117              AXY_W(IJK) = AXY(IJK)
118     !
119              AXZ(IJK) = DX(I)*(cyl_X(I))
120              AXZ_U(IJK) = HALF*(DX(I)+DX(IP))*(HALF*(cyl_X(I)+cyl_X(IP)))
121              AXZ_V(IJK) = AXZ(IJK)
122              AXZ_W(IJK) = DX(I)*(cyl_X(I))
123     
124              if(i.ge.i_cyl_min -i_cyl_transition .and. i.le.i_cyl_max +i_cyl_transition)then
125                 vol_u(ijk) = half*dx(i)*dy(j)*half*(half*(cyl_x_e(i-1) + cyl_x_e(i))+cyl_x_e(i)) + &
126                    half*dx(i+1)*dy(j)*half*(half*(cyl_x_e(i) + cyl_x_e(i+1))+cyl_x_e(i))
127                 axz_u(IJK) = half*dx(i)*half*(half*(cyl_x_e(i-1) + cyl_x_e(i))+cyl_x_e(i)) + &
128                    half*dx(i+1)*half*(half*(cyl_x_e(i) + cyl_x_e(i+1))+cyl_x_e(i))
129              endif
130           endif
131     
132           END DO
133           RETURN
134           END SUBROUTINE SET_GEOMETRY1
135     
136     !// Comments on the modifications for DMP version implementation
137     !// 350 1025 change do loop limits: 1,ijkmax2-> ijkstart3, ijkend3
138     !// 360 Check if i,j,k resides on current processor
139