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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Module name: GET_STATS(IER)                                         C
4     !  Purpose: Get statistics for stalled or diverged iterations          C
5     !                                                                      C
6     !  Author: M. Syamlal                                 Date: 11-FEB-97  C
7     !  Reviewer:                                          Date:            C
8     !                                                                      C
9     !  Revision Number:                                                    C
10     !  Purpose:                                                            C
11     !  Author:                                            Date: dd-mmm-yy  C
12     !  Reviewer:                                          Date: dd-mmm-yy  C
13     !                                                                      C
14     !  Literature/Document References:                                     C
15     !                                                                      C
16     !  Variables referenced:                                               C
17     !                                                                      C
18     !  Variables modified:                                                 C
19     !                                                                      C
20     !  Local variables:  None                                              C
21     !                                                                      C
22     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
23     !
24           SUBROUTINE GET_STATS()
25     !...Translated by Pacific-Sierra Research VAST-90 2.06G5  12:17:31  12/09/98
26     !...Switches: -xf
27     !
28     !  Include param.inc file to specify parameter values
29     !
30     !-----------------------------------------------
31     !   M o d u l e s
32     !-----------------------------------------------
33           USE param
34           USE param1
35           USE physprop
36           USE geometry
37           USE fldvar
38           USE indices
39           USE funits
40           USE residual
41           USE run
42           USE compar
43           USE functions
44           IMPLICIT NONE
45     !-----------------------------------------------
46     !   G l o b a l   P a r a m e t e r s
47     !-----------------------------------------------
48     !-----------------------------------------------
49     !   L o c a l   P a r a m e t e r s
50     !-----------------------------------------------
51     !-----------------------------------------------
52     !   L o c a l   V a r i a b l e s
53     !-----------------------------------------------
54     !
55     !                      Indices
56           INTEGER          I, J, K, IJK, M
57     
58           DOUBLE PRECISION tmp
59     !
60     !                      direction (1 - x, 2 - y, 3- z)
61           INTEGER          Dir_g, Dir_s(DIMENSION_M)
62     !
63     !                      Courant number
64           DOUBLE PRECISION NC_g, NC_s(DIMENSION_M)
65     !
66     !                      Maximum P_star
67           DOUBLE PRECISION Ps
68     !
69     !                      Locations of maxima
70           INTEGER          IJK_NC_g, IJK_Ps, IJK_NC_s(DIMENSION_M)
71     
72     
73     !
74     !-----------------------------------------------
75     
76           DIR_G = 1
77           NC_G = LARGE_NUMBER
78           IJK_NC_G = 0
79     !
80           PS = 0.
81           IJK_PS = 0
82     !
83           DO IJK = IJKMIN1, IJKMAX1
84              IF (FLUID_AT(IJK)) THEN
85                 I = I_OF(IJK)
86                 J = J_OF(IJK)
87                 K = K_OF(IJK)
88     !
89                 IF (U_G(IJK) == ZERO) THEN
90                    TMP = LARGE_NUMBER
91                 ELSE IF (U_G(IJK) > ZERO) THEN
92                    TMP = DX(IP1(I))/U_G(IJK)
93                 ELSE
94                    TMP = -DX(I)/U_G(IJK)
95                 ENDIF
96     !
97                 IF (TMP < NC_G) THEN
98                    NC_G = TMP
99                    IJK_NC_G = IJK
100                    DIR_G = 1
101                 ENDIF
102     !
103                 IF (V_G(IJK) == ZERO) THEN
104                    TMP = LARGE_NUMBER
105                 ELSE IF (V_G(IJK) > ZERO) THEN
106                    TMP = DY(JP1(J))/V_G(IJK)
107                 ELSE
108                    TMP = -DY(J)/V_G(IJK)
109                 ENDIF
110     !
111                 IF (TMP < NC_G) THEN
112                    NC_G = TMP
113                    IJK_NC_G = IJK
114                    DIR_G = 2
115                 ENDIF
116     !
117                 IF (W_G(IJK) == ZERO) THEN
118                    TMP = LARGE_NUMBER
119                 ELSE IF (W_G(IJK) > ZERO) THEN
120                    TMP = DZ(KP1(K))*X(I)/W_G(IJK)
121                 ELSE
122                    TMP = -DZ(K)*X(I)/W_G(IJK)
123                 ENDIF
124     !
125                 IF (TMP < NC_G) THEN
126                    NC_G = TMP
127                    IJK_NC_G = IJK
128                    DIR_G = 3
129                 ENDIF
130     !
131                 IF (P_STAR(IJK) > PS) THEN
132                    PS = P_STAR(IJK)
133                    IJK_PS = IJK
134                 ENDIF
135     !
136              ENDIF
137           END DO
138           M = 1
139           IF (MMAX > 0) THEN
140              DIR_S(:MMAX) = 1
141              NC_S(:MMAX) = LARGE_NUMBER
142              IJK_NC_S(:MMAX) = 0
143              M = MMAX + 1
144           ENDIF
145           DO M = 1, MMAX
146              DO IJK = IJKMIN1, IJKMAX1
147                 IF (FLUID_AT(IJK)) THEN
148                    I = I_OF(IJK)
149                    J = J_OF(IJK)
150                    K = K_OF(IJK)
151                    IF (U_S(IJK,M) == ZERO) THEN
152                       TMP = LARGE_NUMBER
153                    ELSE IF (U_S(IJK,M) > ZERO) THEN
154                       TMP = DX(IP1(I))/U_S(IJK,M)
155                    ELSE
156                       TMP = -DX(I)/U_S(IJK,M)
157                    ENDIF
158     !
159                    IF (TMP < NC_S(M)) THEN
160                       NC_S(M) = TMP
161                       IJK_NC_S(M) = IJK
162                       DIR_S(M) = 1
163                    ENDIF
164     !
165                    IF (V_S(IJK,M) == ZERO) THEN
166                       TMP = LARGE_NUMBER
167                    ELSE IF (V_S(IJK,M) > ZERO) THEN
168                       TMP = DY(JP1(J))/V_S(IJK,M)
169                    ELSE
170                       TMP = -DY(J)/V_S(IJK,M)
171                    ENDIF
172     !
173                    IF (TMP < NC_S(M)) THEN
174                       NC_S(M) = TMP
175                       IJK_NC_S(M) = IJK
176                       DIR_S(M) = 2
177                    ENDIF
178     !
179                    IF (W_S(IJK,M) == ZERO) THEN
180                       TMP = LARGE_NUMBER
181                    ELSE IF (W_S(IJK,M) > ZERO) THEN
182                       TMP = DZ(KP1(K))*X(I)/W_S(IJK,M)
183                    ELSE
184                       TMP = -DZ(K)*X(I)/W_S(IJK,M)
185                    ENDIF
186     !
187                    IF (TMP < NC_S(M)) THEN
188                       NC_S(M) = TMP
189                       IJK_NC_S(M) = IJK
190                       DIR_S(M) = 3
191                    ENDIF
192     !
193                 ENDIF
194              END DO
195           END DO
196           CALL START_LOG
197           IF(DMP_LOG)WRITE (UNIT_LOG, *) 'Gas phase:'
198           IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6, A, I1)') ' Minimum Courant No = ', &
199              NC_G*ODT, '  Location = ', IJK_NC_G, '  Direction = ', DIR_G
200     !
201           DO M = 1, MMAX
202              IF(DMP_LOG)WRITE (UNIT_LOG, '(A, I2, A)') ' Solids phase (', M, '):'
203              IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6, A, I1)') ' Minimum Courant No = '&
204                 , NC_S(M)*ODT, '  Location = ', IJK_NC_S(M), '  Direction = ', &
205                 DIR_S(M)
206           END DO
207           IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6)') ' Maximum P_star = ', PS, &
208              '  Location = ', IJK_PS
209     !
210     !      IF(DMP_LOG)WRITE(UNIT_LOG,'(A, G12.3, A, I6)')
211     !     & " Maximum P_g residual = ", MAX_RESID(RESID_P, 0),
212     !     & "  Location = ", IJK_RESID(RESID_P, 0)
213     !      IF(DMP_LOG)WRITE(UNIT_LOG,'(A, G12.3, A, I6)')
214     !     & " Maximum P_s residual = ", MAX_RESID(RESID_p, 1),
215     !     & "  Location = ", IJK_RESID(RESID_p, 1)
216     !
217           IF(DMP_LOG)WRITE (UNIT_LOG, *)
218     !
219           CALL END_LOG
220     !
221           RETURN
222           END SUBROUTINE GET_STATS
223     
224     !// Comments on the modifications for DMP version implementation
225     !// 001 Include header file and common declarations for parallelization
226     !//? DO loop limits still running between IJKMIN1, IJKMAX1
227